关闭视图会将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属性。

您可以尝试以下方法之一:

  1. 尝试在ItemsSource属性中使用OneTime绑定 ,因此不会清除它。
  2. ViewModel的职责是允许视图轻松绑定。 在Pen属性旁边添加Pens属性。 不要紧,它将是同一种foreach动物。 它只是对同一个集合的引用,因此没有性能或一致性问题。

还有一条评论。 删除SelectedValuePathSelectedValue Binding。 首先,它们与SelectedItem冲突,其次,你错误地使用它们 – 如果你有PenId属性而不是Pen属性,SelectedValuePath =“PenId”会有意义。

SelectedItem绑定上的UpdateSourceTrigger更改为Default

更改itemssource绑定并尝试一次。 我的意思是代替来自Relative source datacontext的绑定,尝试从viewModel绑定并检查一次。