查看未更新(更改ViewModel但不更改ViewModel类型)

时间:2015-11-19 22:40:33

标签: c# wpf mvvm

我使用经典的MVVM模式,我将DataTemplats定义为资源,然后将Content属性绑定到视图中的相应ViewModel。 DataTemplates的定义如下:

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:PersonViewModel}">
        <vw:PersonView/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type vm:ProductViewModel}">
        <vw:ProductView/>
    </DataTemplate>
</Application.Resources>

在某个视图中,我使用ContentPresenter并绑定Content属性

<Grid DataContext={Binding MainViewModel, Source={StaticResource Locator}}"}>
    <ContentPresenter Content="{Binding DetailsViewModel}"></ContentPresenter>
</Grid>

在我的用户界面中,我有一个左侧面板,上面有一个项目列表,让我们说人和产品。在右侧,我正在加载每个项目的详细信息。当我点击一个人时,我将改变MainViewModel的DetailsViewModel属性,如下所示:

DetailsViewModel = new PersonViewModel();

如果我点击一个产品,我会在那里做:

DetailsViewModel = new ProductViewModel();

只要我在左侧面板中的人和产品之间切换,正确的视图就会加载到ContentPresenter中。

但这是问题所在。如果我单击相同类型的对象(即单击人员A,然后单击人员B),视图将不会更新以反映ViewModel中的更改。请注意,此时我们创建PersonViewModel的新实例并将其分配给DetailsViewModel。设置DetailsViewModel将正确引发一个事件,但永远不会调用PersonView的代码隐藏文件中的InitializeComponent()。这里发生了什么,我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:0)

之前我已经使用了这个确切的模式并且它已经有效了。

两件事:

我假设ViewModel上的DetailsViewModel属性是     提出PropertyChanged事件

我的观看次数的数据模板也定义了DataContext="{Binding}"

<DataTemplate DataType="{x:Type vm:PersonViewModel}">
  <vw:PersonView DataContext="{Binding}"/>
</DataTemplate>
相关问题