コンテンツがデータコンテキストのプロパティに完全に依存するWPFコントロールがあります。このために、コントロールのDataContextがInStock、OutOfStock、またはDiscontinuedのStatusプロパティを持つProduct型のものであるとしましょう。プロパティ値のWPF Decorator子ベースの変更
私は、これらのステータスタイプごとに個別のユーザーコントロールを用意しています。私は、Product.Statusにそれぞれの可視性を結びつける何らかの種類のパネルを作成できました。しかし、いくつかのユーザーコントロールは、設定されているさまざまなプロパティに依存するため、いくつかのユーザーコントロールがファンキーなものになってしまったため、問題が発生しました。そして私の実際のアプリケーションでは、多くのステータスがあるので、visualtreeは自分の好みに合わせて大きすぎます。
私はコードを作成して問題を解決しました。私はDataContextのステータス変更をチェックし、大きなswitch文で適切な子を設定します。可能であれば、XAMLでこれを行いたいと思います。私は子供が必要に応じて設定されるようにしたいので、私はテンプレートを使う必要があると思います。このようなもの: SwitchControlはDecoratorやBorderから派生します。
<SwitchControl Property="Status">
<SwitchControl.Possibilities>
<Possibility Value="Discontinued">
<Possibility.Template>
<DiscontinuedView />
</Possibility.Template>
</Possibility>
<Possibility Value="InStock">
<Possibility.Template>
<InStockView />
</Possibility.Template>
</Possibility>
<SwitchControl.Possibilities />
</SwitchControl>
私は全部を短くすることができればそれも良いだろう。
<SwitchControl>
<Possibility Value="Discontinued">
<DiscontinuedView />
</Possibility>
<Possibility Value="InStock">
<InStockView />
</Possibility>
</SwitchControl>
ポイントビーイング、唯一の子は、任意の時点で存在することになります。誰でもこれを行う方法を知っていますか?私はMVVMのフレームワークを見回し、何も見つかりませんでした。それ以外の場合は、自分でカスタムコントロールを作成してみましょう。
可能な方法の1つは、プロパティのトリガを作成し、トリガ設定ツールでコントロールテンプレートを変更することです。異なるテンプレートを別々に定義し、リソースに保存することができます – ASh