UIに同じタイプのUIコントロールが10個あり、すべて同じマルチバインディングコンバーターを使用します。
問題は、重複コードを回避するためにすべてのUIコントロールに適用できるマルチバインディングの共通スタイルを作成できないことです。これは、各コントロールが異なるバインディングプロパティを使用して、バインディングからコンバーターとして渡すためです。
このシナリオでコードの重複を回避できる方法はWPFにありますか?
UIに同じタイプのUIコントロールが10個あり、すべて同じマルチバインディングコンバーターを使用します。
問題は、重複コードを回避するためにすべてのUIコントロールに適用できるマルチバインディングの共通スタイルを作成できないことです。これは、各コントロールが異なるバインディングプロパティを使用して、バインディングからコンバーターとして渡すためです。
このシナリオでコードの重複を回避できる方法はWPFにありますか?
MarkupExtensionを拡張できます。これにより、カスタムConverterラッパーを定義し、それを2つのパスで呼び出すことができます。
編集:あなたの場合、MultiBindingから直接継承し、コンストラクターで適切なデフォルトを設定するのがおそらく最善です。
私はあなたがこのようなものを持っていると思います:
<Button>
<Button.Content>
<MultiBinding Converter="{StaticResource conv}">
<Binding Path="COMMON" />
<Binding Path="SPECIFIC1" />
</MultiBinding>
</Button.Content>
</Button>
<Button>
<Button.Content>
<MultiBinding Converter="{StaticResource conv}">
<Binding Path="COMMON" />
<Binding Path="SPECIFIC2" />
</MultiBinding>
</Button.Content>
</Button>
<Button>
<Button.Content>
<MultiBinding Converter="{StaticResource conv}">
<Binding Path="COMMON" />
<Binding Path="SPECIFIC3" />
</MultiBinding>
</Button.Content>
</Button>
など...これは醜いように見えます、私は同意します。私は代替案を知りませんが、少し考えることで、(imo)もう少し良い解決策を作成することができます:
新しいCommonMultiBindings.xamlを作成するだけです。これには以下が含まれます:
<MultiBinding Converter="{StaticResource conv}">
</MultiBinding>
そして出来上がり、完了。これをCommonMultiBindingsオブジェクトとして参照し、次のように使用します。
<Button.Content>
<CommonMultiBindings>
<!--Actual bindings here-->
</CommonMultiBindings>
</Button.Content>
CommonMultiBindingsに「」を因数分解し、Bindingsプロパティ間の同期に使用される新しいプロパティ(UserBindings)を追加することで、さらに詳しく説明できます。
理想的には、styleプロパティを持つカスタムMultiBindingクラスを作成することをお勧めします。次に、このようなことを+「Bindings」コレクションに自動的に追加される「カスタム」デフォルトバインディングと組み合わせて行うことができます。
<Grid.Resources>
<Style TargetType="MultiBinding">
<Setter Property="Converter" Value="{StaticResource conv}" />
</Style>
</Grid.Resources>