2

バインディングに値コンバーターを指定する際に遭遇した最も一般的な方法は、次のとおり
です。1.値コンバーターのインスタンスをリソースとしてキーを使用して作成します。
2.StaticResourceマークアップ拡張機能を使用してインスタンスを参照します。

<TextBlock Text="{Binding Converter={StaticResource myFormatter}" />  

Q:静的インスタンスを次のように使用することに何か問題がありますか?

<TextBlock Text="{Binding Path=Description, Converter={x:Static local:MyFormatter.Instance}}"/>

// where Instance is declared as:
public readonly static MyFormatter Instance = new MyFormatter();

私の場合、値コンバーターは不変です。

編集:別の方法は、コンバーターを拡張機能 に変換して、マークアップ拡張形式を使用してコンバーターを指定することです。

<TextBlock Text="{Binding Converter={local:MyFormatter}}"/>
4

2 に答える 2

2

技術的には問題ありませんが、実際には好きではありません。

  1. コンバーターをリソースとして宣言すると、単一の参照ポイントが得られます。コンバーターの名前空間またはクラス名を変更した場合、更新する場所は 1 か所だけです。

  2. 静的として宣言する場合clr-namespaceは、コンバーターを使用するすべての xaml ファイルの先頭に を配置する必要があります。それをリソースとして宣言する場合は、宣言しません。

  3. {Binding Converter={StaticResource myFormatter}静的なものよりもはるかに短く、読みやすいです。長期的には、これはあなたが思っている以上に役立ちます。

于 2009-06-03T20:53:43.293 に答える
0

フォーマッタが実際に状態を持たない限り、これで問題ありません。ただし、同等ではありません。最初のケースでは、XAML ベースのコントロールのインスタンスごとにクラスのインスタンスがあります。2 番目の例では、インスタンスが 1 つだけ作成されます。

于 2009-06-03T20:50:51.987 に答える