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 Inspector,我看到资源值何时更改,绑定了一个新的已清除对象而不是我创建的对象

我是 WPF 的新手,对不起我的英语和我的无知;

问候,

编辑 1

它可以实现道德逻辑发布的代码,谢谢!但是很抱歉,如果我之前不清楚,当绑定一个新资源时,如下所示

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 回答