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>

ビューモデルがバインドされているコンテキストに基づいて、ビューモデルのビューを選択することは可能ですか? たとえば、ウィンドウCompanyViewの に表示されている場合、または に表示されている場合に使用し、 ?に表示されている場合に使用します。ContentControlTabControlCompanyViewSmallListView

4

1 に答える 1

1

使用DataTemplateする は最初にローカルで検索され、見つからない場合はビジュアル ツリー階層のさらに上を検索します。

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

たとえば、次の例では、が小さいビューとして指定されている特定の場所を除いて、ビジュアル ツリー内のCompanyViewどこでもを使用します。CompanyViewModelListViewDataTemplate

<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任意の に小さいビューが適用されます。デフォルトのスタイルを継承して小さい.ListViewListViewDataTemplate

<Style TargetType="{x:Type ListView}">
    <Style.Resources>
        <DataTemplate DataType="{x:Type vm:CompanyViewModel}">
            <vw:CompanyViewSmall />
        </DataTemplate>
    </Style.Resources>
</Style>
于 2012-04-18T18:58:59.893 に答える