关闭视图会将ViewModel的属性设置为null
我使用DataGrid
在我的WPF应用程序中显示动物列表:
使用以下XAML从我的ViewModel中的另一个集合Pens加载ComboBox
“Bucht”的值,该工作正常:
现在问题是 :如果关闭视图,例如通过单击另一个视图,我的ViewModel的一些属性将设置为null。 如果我重新打开视图,则将笔设置为null,如下所示:
调试器确认它:
我认为这与WPF View在关闭时将ViewModel属性设置为null的问题有关 。 但是我无法使用这些答案中提供的解决方法(即在我的ComboBox
设置UpdateSourceTrigger=LostFocus
),因为我在编辑后直接保存了实体,因此LostFocus更新是迟到的。
是否有任何干净的方法来避免这种行为?
问题似乎是ItemsSource绑定。 当您导航到其他视图时,ItemsSource绑定返回null,combobox中的项被删除,SelectedItem被设置为null,SelectedItem.Binding更新更新Pen属性。
您可以尝试以下方法之一:
- 尝试在ItemsSource属性中使用OneTime绑定 ,因此不会清除它。
- ViewModel的职责是允许视图轻松绑定。 在Pen属性旁边添加Pens属性。 不要紧,它将是同一种foreach动物。 它只是对同一个集合的引用,因此没有性能或一致性问题。
还有一条评论。 删除SelectedValuePath
和SelectedValue
Binding。 首先,它们与SelectedItem冲突,其次,你错误地使用它们 – 如果你有PenId属性而不是Pen属性,SelectedValuePath =“PenId”会有意义。
将SelectedItem
绑定上的UpdateSourceTrigger
更改为Default
更改itemssource绑定并尝试一次。 我的意思是代替来自Relative source datacontext的绑定,尝试从viewModel绑定并检查一次。