MVVM Light,TreeView ItemSsource不更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVVM Light,TreeView ItemSsource不更新相关的知识,希望对你有一定的参考价值。
我使用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属性时,我的TreeView不会更新/显示新的TreeModel。据我所知,MVVM Light中的Set()函数应该在内部调用RaisePropertyChanged()。
View绑定的ViewModel派生自MyViewModelBase类,该类派生自MVVM Light的ViewModelBase类。 Model属性在MyViewModelBase类中定义。
我错过了什么,为什么View没有刷新?怎么解决?
从ViewModels构造函数设置Model属性时,它将按照TreeView的预期显示,它只是从控件外部到Model属性的连续调用,不会影响TreeView。我已经调试并确认了setter中的行
Set(nameof(Model), ref model_, value);
真的被召唤了。
找到问题的解决方案。在二级用户控件中引用时,Dicrionary资源不会以与app.xaml级别相同的方式合并。由于我的视图设置为从vmlocator获取datacontext并且IoC容器对于vmlocator是本地的(如果想要能够创建多个usercontrol,则必须),第二级视图获得了VMLocator的新实例而不是父实例。因此,新实例也注入了一个新的空模型,解释了奇怪的行为。
以上是关于MVVM Light,TreeView ItemSsource不更新的主要内容,如果未能解决你的问题,请参考以下文章
TreeView —WPF—MVVM—HierarchicalDataTemplate