2012-04-18 42 views
2

在我的WPF应用程序中,我有一个名为CompanyViewModel的视图模型类。获取呈现视图的上下文?

有时,这个类的一个实例设置为我的主窗口中,这是这样定义的DataContext

<window x:Class= ..... > 
    <Grid> 
     <ContentControl Content="{Binding }"></ContentControl> 
    </Grid> 
</Window> 

在这种情况下,我想要使用的视图,显示的所有属性视图模型。

其他时间,ListView控件将其itemsource设置为包含CompanyViewModel实例的集合。在这里,我想要使用一个只呈现一些重要属性的视图。

我有这个在MainWindow.xaml资源字典:

<DataTemplate DataType="{x:Type vm:CompanyViewModel}"> 
    <vw:CompanyView></vw:CompanyView> 
</DataTemplate> 

是否可以选择基于上下文的视图模型,其中视图模型进行装订的看法?例如,要在窗口的ContentControl中显示时或在TabControl中使用CompanyView,并在ListView中显示时使用CompanyViewSmall

回答

1

要使用的DataTemplate首先在本地查找,然后查找可视树层次结构(如果未找到)。

因此,您可以指定DataTemplate在层次结构的更下方使用与正常不同的内容。

例如,下面将使用CompanyView任何地方CompanyViewModel是在视觉树,除了在其中所述DataTemplate被指定为小视图特定ListView

<Window.Resources> 
    <DataTemplate DataType="{x:Type vm:CompanyViewModel}"> 
     <vw:CompanyView /> 
    </DataTemplate> 
</Window.Resources> 


<ListView> 
    <ListView.Resources> 
     <DataTemplate DataType="{x:Type vm:CompanyViewModel}"> 
      <vw:CompanyViewSmall /> 
     </DataTemplate> 
    </ListView.Resources> 
</ListView> 

您也可以使用为ListView告诉它使用在.Resources较小的模板隐式的风格,但是这将较小的视图适用于任何ListView,而不仅仅是特定的人,如果你曾经申请另一样式为ListView您必须记住继承默认样式以保持较小的DataTemplate

<Style TargetType="{x:Type ListView}"> 
    <Style.Resources> 
     <DataTemplate DataType="{x:Type vm:CompanyViewModel}"> 
      <vw:CompanyViewSmall /> 
     </DataTemplate> 
    </Style.Resources> 
</Style> 
+0

整洁,谢谢。我喜欢风格的解决方案。 – Oliver 2012-04-19 07:33:47

相关问题