MVVM Light,TreeView ItemSsource不更新

问题描述 投票:0回答:1

我使用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); 

真的被召唤了。

.net wpf binding treeview mvvm-light
1个回答
0
投票

找到问题的解决方案。在二级用户控件中引用时,Dicrionary资源不会以与app.xaml级别相同的方式合并。由于我的视图设置为从vmlocator获取datacontext并且IoC容器对于vmlocator是本地的(如果想要能够创建多个usercontrol,则必须),第二级视图获得了VMLocator的新实例而不是父实例。因此,新实例也注入了一个新的空模型,解释了奇怪的行为。

© www.soinside.com 2019 - 2024. All rights reserved.