MVVM Light,TreeView ItemSource不更新

时间:2019-04-24 14:51:27

标签: .net wpf binding treeview mvvm-light

我使用MVVM-Light。 在我的XAML中,我在TreeView中具有以下绑定。

<TreeView Grid.Row="1"
                  ItemsSource="{Binding Model.Root.ChildPages, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" 

VM中的Model属性如下所示。

 public TreeModel Model
        {
            get { return model_; }
            set
            {
                Set(nameof(Model), ref model_, value);                   
            }
        }

TreeModel和TreeModel.Root都是ObservableObjects。 TreeModel.Root.ChildPages是一个ObservableCollection。

(我实际上并没有更改当前绑定的对象,但是我设置了一个全新的Model,因此我实际上使用了可观察对象,因为我的模型应该没有任何区别,但我认为值得一提)

设置我的Model属性时,我的TreeView不会更新/显示新的TreeModel。据我所知,MVVM Light的Set()函数应在内部调用RaisePropertyChanged()。

视图绑定到的ViewModel派生自MyViewModelBase类,该类派生自MVVM Light的ViewModelBase类。 Model属性在MyViewModelBase类中定义。

我缺少什么,为什么视图没有刷新? 如何解决?

从ViewModels构造函数设置Model属性时,它将按TreeView的预期显示,只是从控件外部对Model属性的连续调用不会影响TreeView。我已经调试并确认了setter中的这一行

 Set(nameof(Model), ref model_, value); 

真的被叫到。

1 个答案:

答案 0 :(得分:0)

找到了解决问题的方法。 在第二级用户控件中引用和在app.xaml级中一样,典范资源的合并方式不同。由于我的视图设置为从vmlocator捕获数据上下文,并且IoC容器位于vmlocator本地(必须,如果一个人希望能够创建多个用户控件),第二层视图获得了VMLocator的新实例,而不是父实例。因此,新实例还注入了一个新的空模型,该模型解释了这种奇怪的行为。