0

カスタムクラスがあります:

class CustomClass
{
    public string Test { get; set; }

    CustomClass()
    {
        this.Test = "";
    }
}

このカスタム クラスを Application.Resources で次のように宣言しています。

<Application.Resources>
    <local:CustomClass x:Key="myobj"/>
</Application.Resources>

このリソースはグリッドの DataContext であり、TextBox は次のように Test プロパティをバインドします。

<Grid DataContext="{DynamicResource myobj}">
    <TextBox Text="{Binding Path=Test, Mode=TwoWay}"></TextBox>        
</Grid>

実行時に突然、リソースの値を変更します

this.Resources["myobj"] = new CustomClass() { Test = "12456" };

TextBox で参照される値は、常に「myobj」リソースに現在あるオブジェクトの値であり、TextBox の Text プロパティの値が変更されたときに、現在のオブジェクトの値を自動的に変更する必要があるため、 Mode=TwoWay を使用しましたが、起こりません。

私はWPFインスペクターを使用しましたが、リソース値が変更されたときに、作成したオブジェクトではなく、新しいクリアされたオブジェクトをバインドするのを見ました

私はWPFが初めてで、英語と知識がなくて申し訳ありません。

よろしく、

編集1

ethicallogics によって投稿されたコードを実装して動作します。ありがとう! しかし、以前に明確でなかったら申し訳ありませんが、次のように新しいリソースをバインドするとき

this.Resources["myobj"] = new instance;

このリソースが宣言されたのと同じウィンドウ内で呼び出されると正常に動作しますが、UserControl 内でこの行を呼び出す場合とは異なり、UserControl は MainWindow リソースを継承していないようですが、実際にはどのように機能しますか?

4

1 に答える 1

0
    class CustomClass:INotifyPropertyChanged
{
    private string _test;
    public string Test 
    {
        get
        {
            return _test;
        }

        set
        {
            _test = value;
            Notify("Test");
        }
    }

    CustomClass()
    {
        this.Test = "";
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion

    private void Notify(string propName)
    { 
        if(PropertyChanged!=null)
            PropertyChanged(this,new PropertyChangedEventArgs(propName);
    }
}

このクラスを使用してください。これが役立つことを願っています。

于 2012-07-19T02:05:07.027 に答える