【发布时间】:2023-03-27 01:13:01
【问题描述】:
我的 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" />
【问题讨论】:
-
没有
UpdateSourceTrigger,只有在TextBox失去焦点后才会提交值。这会影响您的用例吗?另外,如果Text是从数据库中加载的,你应该使用TwoWay绑定模式。 -
你能告诉我们在什么样的变化之后,价值更新失败了吗?
-
@helb,对不起,我没有提到,我已经尝试过 TwoWay 的黑客攻击 - 它没有任何区别。此外,它只是一种方式绑定(从我的 View 到我的 ViewModel)