MVVM Light, TreeView ItemSource not updating



I use MVVM-Light. 在我的 XAML 中,我在树视图中有以下绑定。

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

VM 中的"模型"属性如下所示。

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

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

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

设置我的模型属性时,我的树视图不会更新/显示新的树模型。据我所知,来自 MVVM Light 的 Set() 函数应该在内部调用 RaisePropertyChanged()。

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

我错过了什么,为什么视图不刷新? 如何解决?

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

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

真的被召唤了。

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

最新更新