我的WPF(MVVM)项目面临一个奇怪的问题。
我有一些控件绑定到ViewModel中的属性。 INotifyPropertyChanged已配置,一切(最初有效)。我在控件中键入了一些值,然后单击一个按钮。我可以看到,通过单步执行代码,所有属性值都是它们应该是的。到目前为止,它是教科书。
现在我注意到了这个问题。单击按钮后,将执行一些逻辑,例如将这些值保存到数据库。然后我可以编辑控件值,然后再次保存到数据库。此时的属性不会更新。
绑定显然有效,因为输出显示没有绑定错误,当我单击“保存”按钮时,属性是正确的。但是,单击保存按钮,然后更改属性值后,属性不会更新。我无法理解为什么会这样。
作为试验,我将PropertyChanged添加到更新源触发器中,这似乎解决了这个问题,但是,我以前从未这样做过。什么想法可能是错的?
我不相信答案是双向约束(我很高兴错了),因为它会绑定!
<TextBox Text="{Binding DataSource, UpdateSourceTrigger=PropertyChanged}" Grid.Row ="1" Grid.Column="2" />
通常我会使用
<TextBox Text="{Binding DataSource}" Grid.Row ="1" Grid.Column="2" />
答案 0 :(得分:1)
UpdateSourceTrigger属性确定何时必须更新绑定。此属性的默认值为LostFocus。因此,默认情况下,键入内容并移出焦点后,绑定将更新。如果将属性值设置为PropertyChanged,则在文本框中输入值后绑定将立即更新。
在您的情况下,绑定会在按钮单击时更新,因为焦点从文本框传输到Button。一旦UpdateSourceTrigger设置为PropertyChanged,绑定将在每次文本更改时更新。