WPF - TextBox设置为只读时未正确绑定

b5buobof  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(247)

我有一个文本框,我用它来添加(只添加而不是读取)文件路径到数据库中。文本属性是在用户选择某个文件(OpenFileDialog)时设置的。所以,我将它设置为只读状态,它将无法正确绑定。当我删除只读时,它工作正常。

<Button Name="btnAddFile" Content="+" HorizontalAlignment="Left" Width="23" Height="23" Click="AddFilePath"/>
<TextBox Name="tbxFilePath" Height="23" Text="{Binding FilePath}" Width="364" IsReadOnly="True"/>

当我用途:

Text="{Binding FilePath, Mode=OneWayToSource}"

它有时工作,但大多数时候它不工作(?!)。我可以使用TextBlock或Label,但我真的很想了解发生了什么,并使用TextBox。
我使用实体框架,但不认为这有什么关系。
问:如何以编程方式将文本添加到只读的TextBox控件并能够绑定它。
编辑:我发现了问题所在。当我在之后将焦点设置在TextBox上时,我从代码隐藏中设置了它的Text属性,它工作了。我猜当我从代码隐藏中设置它时,它必须通知文本被更改了。如何做到这一点?

jyztefdp

jyztefdp1#

您是否尝试过使用OneWay绑定?
MSDN的内容如下:

OneWay当绑定源(源)更改时更新绑定目的(目的)属性.如果要绑定得控件是隐式 * 只读 * 得,则此类型得绑定适用.

我想你的情况也差不多了。

  • target* 是您的TextBox Text属性,而 source 是ViewModel上的FilePath属性。

用途:

Text="{Binding FilePath, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"

编辑

这个答案假设您已经在ViewModel上实作了INotifyPropertyChanged

编辑

正确的绑定模式为OneWayToSource。已由OP确认。

相关问题