Wpf 输入初始值后MVVM未绑定

Wpf 输入初始值后MVVM未绑定,wpf,mvvm,Wpf,Mvvm,我的WPF(MVVM)项目面临一个奇怪的问题 我有几个控件绑定到ViewModel中的属性。INotifyPropertyChanged已配置,一切(最初工作正常)。我在控件中键入一些值,然后单击一个按钮。我可以看到,通过逐步遍历代码,所有属性值都是它们应该是的。到目前为止,它是一本教科书 现在我注意到了这个问题。单击按钮后,执行一些逻辑,例如将这些值保存到数据库。然后我可以编辑控件值,然后再次保存到数据库中。此时的属性将不更新 绑定显然是有效的,因为输出没有显示绑定错误,当我单击Save按钮时

我的WPF(MVVM)项目面临一个奇怪的问题

我有几个控件绑定到ViewModel中的属性。INotifyPropertyChanged已配置,一切(最初工作正常)。我在控件中键入一些值,然后单击一个按钮。我可以看到,通过逐步遍历代码,所有属性值都是它们应该是的。到目前为止,它是一本教科书

现在我注意到了这个问题。单击按钮后,执行一些逻辑,例如将这些值保存到数据库。然后我可以编辑控件值,然后再次保存到数据库中。此时的属性将不更新

绑定显然是有效的,因为输出没有显示绑定错误,当我单击Save按钮时,属性是正确的。但是,单击“保存”按钮,然后更改属性值后,属性不会更新。我不明白为什么会这样

作为试用,我在更新源触发器中添加了PropertyChanged,这似乎解决了这个问题,但是,我以前从未这样做过。有什么想法吗

我不相信答案是双向绑定(我很高兴错了),因为它绑定

<TextBox  Text="{Binding DataSource, UpdateSourceTrigger=PropertyChanged}" Grid.Row ="1" Grid.Column="2" />

我通常会在哪里使用

<TextBox  Text="{Binding DataSource}" Grid.Row ="1" Grid.Column="2" />

UpdateSourceTrigger属性确定必须更新绑定的时间。此属性的默认值为LostFocus。因此,默认情况下,在键入内容并移出焦点后,绑定将更新。如果将属性值设置为PropertyChanged,则在文本框中输入值后,绑定将立即更新


在您的情况下,绑定会在单击按钮时更新,因为焦点从textbox转移到按钮。一旦UpdateSourceTrigger设置为PropertyChanged,绑定将在每次文本更改时更新。

如果没有
UpdateSourceTrigger
,则只有在
TextBox
松开焦点后才会提交该值。这会影响您的用例吗?另外,如果文本是从数据库加载的,您应该使用双向绑定模式。您能告诉我们在什么样的更改之后,值更新失败了吗?@helb,对不起,我没有提到,我已经尝试了双向破解-这没有什么区别。此外,它只是单向绑定(从我的视图到我的视图模型)我丢失了,有默认、显式、LostFocus和PropertyChanged的选项吗?如果默认值为LostFocus,那么默认值是什么?我也知道UpdateSourceTrigger是如何工作的,因此在我的示例中使用这两种工具,我的问题是为什么需要它。当我点击按钮时,肯定意味着文本框失去了焦点?@Dave“默认”取决于DependencyProperty,类似于绑定模式。请参阅UpdateSourceTrigger.Default的文档:“绑定目标属性的默认UpdateSourceTrigger值。大多数依赖项属性的默认值为PropertyChanged,而Text属性的默认值为LostFocus。”@helb,谢谢,但是,当我单击按钮时,TextBlock的LostProperty肯定是在“onclick”按钮之前执行的吗?@Dave不会对WPF中触发的事件顺序进行假设。这已经让我流泪好几次了……今晚我在电脑旁——我真的需要做一些测试。非常有趣的评论,非常非常有趣的评论!谢谢你@helb