在WPF中跨不同视图的主细节

时间:2010-04-19 16:35:46

标签: wpf mvvm prism

如果我将master和detail放在同一个视图中,我可以让master-detail场景工作得很好。但是,我希望能够根据用户安全性定制详细信息。因此,我使用相同的viewmodel作为后端将详细信息部分移动到单独的视图。现在,当选择新的主记录时,细节不会正确更新。如果两个视图使用相同的viewmodel,那么这个工作应该没问题吗?就像我说的那样,当代码在同一个视图中时,它可以正常工作。

详细信息XAML:

<ListView x:Name="DoctorOfficesList"
              Grid.Column="1"
              Background="black"
              HorizontalContentAlignment="Stretch"
              IsSynchronizedWithCurrentItem="True"
              ItemsSource="{Binding Path=SelectedDoctor.DoctorOfficesCollection}"
              ItemTemplate="{StaticResource DoctorOfficesListTemplate}">
    </ListView>

Master XAML:

<ListBox x:Name="DoctorHeaderList"
             Grid.Column="0"
             MinWidth="200"
             MaxWidth="300"
             Margin="0,0,2,0"
             Background="black"
             ItemsSource="{Binding Path=DoctorsList}"
             SelectedItem="{Binding Path=SelectedDoctor}"
             IsSynchronizedWithCurrentItem="True"
             ItemTemplate="{StaticResource DoctorsListTemplate}"
             ScrollViewer.HorizontalScrollBarVisibility="Hidden">
    </ListBox>

我尝试了几种方法让它发挥作用。当列表框位于同一视图中时,所有方案都有效。当单独移动时,它们停止。如果重要的话我也在使用PRISMv2。

我想我的具体问题是如何让它工作?我真的需要一个活动吗?我认为,因为它们与同一个虚拟机绑在一起,所以这很容易。

1 个答案:

答案 0 :(得分:2)

您确定两个视图都使用了视图模型的相同实例吗?我偶尔在我的视图模型中实现一个属性,它暴露GetHashCode()的结果并在视图中绑定TextBlock只是为了仔细检查两个应该绑定到同一个实例的东西实际上是。