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