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不更新的主要内容,如果未能解决你的问题,请参考以下文章

MVVM Light须要注意的10个问题

TreeView —WPF—MVVM—HierarchicalDataTemplate

WPF MVVM TreeView SelectedItem

MVVM Light和MVVM有什么区别?

MVVM-light 中的清理与处置(布尔)

WPF - MVVM ???TreeView