1

私は自分の新しいプロジェクトを開始しようとしており、現在、ローカリゼーション、モジュール性などのいくつかの手法を評価しています.

私は (少なくとも私の意見では) ローカリゼーションに対してかなり良いアプローチをとっていますが、今はデータバインディングの良い解決策を見つけるのに苦労しています。

テキストフィールドなどの値(一般的にUIElements)をフォームのDataContextの特定のメソッドにバインドしたい。メソッドは次のようになります。

public void GetValue(string name)

ここで、名前は「ノード/サブノード/サブサブノード」の形式の「パス」です。バインディングに ValueConverter を使用することを考えましたが、これは今のところうまくいきました。

私のバインディング式は次のようになります。

{Binding Path=Localization, Converter={StaticResource LocalizationConverter}, ConverterParameter=PrismBreak/Shell.xaml/New}

このバインディング式は、その仕事をしていますが、すべての UIElement に使用するために少し爆破されていると思います。そのため、特定のタイプのデフォルトの ValueConverter を定義できるかどうかを考えました (-> そのタイプが ValueConverter が使用されている場所にバインドされている場合)。

それはWPFで可能ですか?

それが不可能な場合、動的パラメーターを使用してメソッドにバインドする他の良い方法はありますか?

よろしくお願いいたします。

クリス

4

1 に答える 1

3

WPF のローカライズを行うための規定の方法は、サテライト アセンブリでローカライズされた BAML を作成することです。これは、ローカライズしたい要素にx:Uid添付プロパティを追加することによって実現されます。MSDN にWPF のグローバリゼーションとローカリゼーションのセクションがあり、テクニックが説明されています。

私が提案する別のアプローチは、静的な「ローカライゼーション ディクショナリ」タイプを作成し、ICustomTypeDescriptorを実装して、着信プロパティ バインドをディクショナリ内の文字列にリダイレクトすることです。あなたはこのようなことをすることになるかもしれません:

<Button Content="
    {Binding Source={x:Static local:MyStaticType.Localization}, 
             Path=HelloButtonTitle}" /> 

また、RESX + サテライト アセンブリなどの既存のテクノロジを引き続き活用することもできます。

于 2009-03-07T21:27:11.523 に答える