我有一个TextBox,我正在使用它添加(仅添加而不读取)文件路径到DB中。当用户选择某些文件(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。
我正在使用Entity Framework,但认为这并不重要。
问题:如何以编程方式将文本添加到TextBox控件中,该控件是只读的并且能够绑定它。
编辑:我知道了问题所在。当我在之后上将焦点放在TextBox上时,从代码后面设置了它的Text属性,它可以工作。我想它必须在我从代码后台执行操作时通知Text已更改。该怎么做?
答案 0 :(得分:0)
您是否尝试过使用OneWay
绑定?
MSDN读取:
OneWay (当绑定源(源)更改时)更新绑定目标(target)属性。如果要绑定的控件隐式为只读。
我认为这可以解决您的情况。
target 是您的TextBox Text
属性,而 source 是您在ViewModel上的FilePath
属性。
使用:
Text="{Binding FilePath, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
此答案假设您已在ViewModel上实现了INotifyPropertyChanged
。
正确的绑定模式是OneWayToSource
。由OP确认。