同一类的两个实例的绑定属性,非wpf

本文关键字:属性 绑定 实例 wpf 一类 两个 | 更新日期: 2023-09-27 18:24:17

我有一个类和它的许多实例。我需要将一个实例的属性绑定到另一个实例。因此,在我的例子中,我需要实例b的Symbol属性绑定到实例a的Symbol。因此,如果a.Symbol更改,b.Symbol将立即更改。最简单的解决方案是什么?

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            var a = new MyClass ();
            var b = new MyClass();
            a.Symbol = "A";
            b.Symbol = a.Symbol;    // Not work!
            a.Symbol = "B";
            MessageBox.Show(b.Symbol);
        }
    }
    public class MyClass
    {
        private string _symbol;
        public string Symbol
        {
            get { return _symbol; }
            set
            {
                _symbol = value;
            }
        }
    }
}

同一类的两个实例的绑定属性,非wpf

请尝试此操作。。通过在MyClass上添加额外的属性,并告诉类b obj依赖于一个obj。在符号设置器中更新依赖对象符号

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        var a = new MyClass ();
        var b = new MyClass();
        a.DependentObj = b;
        a.Symbol = "A";
        //b.Symbol = a.Symbol;    // Not work!
        a.Symbol = "B";
        MessageBox.Show(b.Symbol);
    }

}
   public class MyClass
{
    private MyClass _dependentObj;
    private string _symbol;
    public MyClass DependentObj
    {
        get { return _dependentObj; }
        set
        {
            _dependentObj = value;
        }
    }
    public string Symbol
    {
        get { return _symbol; }
        set
        {
            _symbol = value;
            //Here add the update code
            if(DependentObj !=null)
            {
                DependentObj._symbol = value;
            }
        }
    }
}

没有办法做到你想要的。a.符号和b.符号过去指向相同的值,但一旦你改变了a.符号的值,它们现在就不一样了。

如果你保持a.符号和b.符号指向同一个对象,并更改该对象,你就可以实现你想要的。你不能用字符串来做,因为字符串是不可变的。但你可以使用一些字符串包装器——我将在这里使用StringBuilder,因为它是内置的:

a.Symbol = new StringBuilder("a");
b.Symbol = a.Symbol;
a.Symbol.Clear();
a.Symbol.Append("b");
b.Symbol.Dump();

当然,您可以使用自己的包装器,而不是使用StringBuilder。您甚至可以使用隐式运算符重载将其从字符串自动转换。