質問

私はちょうど私の新しいプロジェクトを開始しようとしていますが、現在、ローカリゼーション、モジュール化などのためのいくつかのテクニックを評価しています。

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

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

public void GetValue(string name)

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

バインド式は次のようになります。

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

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

WPFで可能ですか?

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

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

クリス

役に立ちましたか?

解決

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

別のアプローチとして、静的な「ローカライゼーションディクショナリ」タイプを作成し、 ICustomTypeDescriptor 。着信プロパティバインドを辞書の文字列にリダイレクトします。次のようなことをすることになります:

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

そして、RESX + Satelliteアセンブリなどの既存のテクノロジーを引き続き活用できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top