2012-04-18 10 views
2

私のWPFアプリケーションでは、CompanyViewModelというビューモデルクラスがあります。のすべてのプロパティを表示する私は、ビューを使用することにしたい。この場合ビューがレンダリングされるコンテキストを取得しますか?

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

時には、このクラスのインスタンスは、次のように定義されている私のメインウィンドウのDataContextとして設定されていますビューモデル。

その他の場合、ListViewコントロールのitemsourceは、CompanyViewModelのインスタンスを含むコレクションとして設定されています。ここでは、いくつかの重要なプロパティのみをレンダリングするビューを使用したいと考えています。

私はMainWindow.xamlのリソースディクショナリでこれを持っている:

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

それはのviewmodelがバインドされるコンテキストに基づいてのviewmodelのビューを選択することは可能ですか?例えば、ウィンドウのContentControlに表示された場合、またはTabControlにある場合はCompanyViewを使用し、ListViewに表示されているCompanyViewSmallを使用するには、

答えて

1

使用するDataTemplateは、まずローカルで検索し、見つからなければビジュアルツリー階層をさらに探します。

このため、DataTemplateを指定すると、階層をさらに下げて通常とは異なるものを使用することができます。

例えば、以下はCompanyViewどこCompanyViewModelDataTemplateが小さいビューとして指定されている特定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

関連する問題