2011-09-14 5 views
3

私はSilverlight xamlのいくつかのコントロールにバインドされたDynamicObjectクラスを持っています。SilverlightコントロールをDynamicObject.Propertiesにバインドできますか?

class Localizer 
{ 
    public Strings Strings { get; set; } 
} 

public class Strings : DynamicObject 
{ 
    Dictionary<string, string> values; 

    public Strings(Dictionary<string, string> values) 
    { 
     this.values = values; 
    } 

    public override bool TryGetMember(GetMemberBinder binder, out object result) 
    { 
     string value; 
     bool success = values.TryGetValue(binder.Name, out value); 
     result = value; 
     return success; 
    } 
} 

と、次のようにこれにいくつかのコントロールをバインド:

System.Windows.Dataエラー:BindingExpressionパスエラー私はVS出力にこのエラーを取得するアプリケーションを実行すると

<TextBlock Text="{Binding Strings.User, Source={StaticResource Localizer}}"/> 

: 'ログイン'プロパティが '.... Localization.StringsResource' '.... Localization.StringsResource'(HashCode = 10857028)に見つかりません。 BindingExpression:Path = 'Strings.Login' DataItem = '.... Localization.Localizer'(HashCode = 30604389);ターゲット要素は 'System.Windows.Controls.Button'(Name = 'btnLogin')です。 targetプロパティは 'Content'(型 'System.Object')です。

が、このようなコードでプロパティを読むとき:

string UserName = localizer.Strings.Login; 

それは正常に動作し、それはXAMLでDynamicObjectにコントロールをバインドすることは可能でしょうか?

答えて

0

、あなたがデータバインドのプロパティをすることはできませんが、私はあなたがライブデータをサポートしていないと仮定しているので、あなたが。インデクサをデータバインドすることができますそのあなたの文字列オブジェクトの変更、それはあなただけの辞書を返すと構文を結合インデクサーを使用することができINotifiyPropertyChangedサポートしていないよう。

しかし、あなたはINotifiyPropertyChangedをサポートする必要がなかった場合、SilverlightはNOTIFの構文を持っていますStringsオブジェクトで使用できる特定のインデクサ値new PropertyChangedEventArgs("Item["+key+"]")の変更。

Silverlight 5は簡単にworkaroundを持っているかもしれませんが、これは難しいものです。

関連する問題