使用WPF / MVVM检测文本框保存时更改

时间:2012-01-16 20:44:40

标签: wpf mvvm

使用WPF& MVVM与实体数据模型,我试图检测单击保存按钮时我的六个文本框中的任何一个已更改。我想保存所有正常工作的更改,但我也在更新视图中其他位置的网格,只有当其中一个文本框发生了更改时。

我是wpf的新手,不知道采取什么方法。我是否在xaml中的文本框的属性中使用类似UpdateSourceTrigger的东西或使用验证...或其他?无论最好的方式,你能解释一下如何/为什么?

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

最好的方法是,如果ViewModel中的每个TextBox都有一个不同的变量,并使用TwoWay绑定。并且还实现了INotifyPropertyChanged接口,它允许ViewModel通知View属性值已更改。我希望这会引导您朝着正确的方向前进并帮助您解决问题。

其他方式是使用一个标志来显示一个值已经改变,你的Save会看一下这个标志并采取正确的行动。您可以在属性Setter中设置标志。

答案 1 :(得分:1)

BigL 给出了很好的提示 - 谢谢。

我可以补充一下: 在WPF窗口的XAML中,您将拥有TextBox的以下内容:

<TextBox Text="{Binding Path=MyPath, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, UpdateSourceTrigger=PropertyChanged}" />

这是....

  

UpdateSourceTrigger =的PropertyChanged

...在标签的末尾,它完成所有奇迹(如上面提到的 BigL )。也许这就是你正在寻找的东西,因为它可以独立地检测文本框中的文本变化,无论它是焦点,失去焦点,还是根本没有焦点等等.... 因此,我认为应该为你做的伎俩: - )

对我来说很好....

答案 2 :(得分:0)

我对此问题并不完全清楚:您想要在按下“保存”按钮时检测到某些内容已发生变化?如果是这样,为什么?为什么不在允许按下按钮之前检查它?我不是想成为一个迟钝的人,我正试着去追求意图。

最有可能的是,您需要在每个文本框上使用TwoWay DataBinding返回VM中的属性。网格也可以绑定到这些属性,更新将自动发生,并且仅在更改时发生。您还可以创建私有的OriginalValue属性,以便在值已更改时轻松比较。

此外,我将Save Button绑定到ICommand(我更喜欢RelayCommand)。这将允许您通过分析属性的更改状态来控制ViewModel中绑定按钮的Enabled状态。