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

C# 同一类的两个实例的绑定属性,非wpf,c#,.net,C#,.net,我有一个类,它有很多实例。我需要将一个实例的属性绑定到另一个实例。所以在我的例子中,我需要实例b的Symbol属性绑定到实例a的Symbol。所以如果a符号改变,b符号会立即改变。最简单的解决方案是什么 public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); var a = new MyCl

我有一个类,它有很多实例。我需要将一个实例的属性绑定到另一个实例。所以在我的例子中,我需要实例b的Symbol属性绑定到实例a的Symbol。所以如果a符号改变,b符号会立即改变。最简单的解决方案是什么

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;
            }
        }
    }
}

请试试这个。。通过在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、 Symbol和b.Symbol过去指向相同的值,但一旦更改a.Symbol的值,它们现在就不同了

如果将a.Symbol和b.Symbol保持指向同一对象,并更改该对象,则可以实现所需。不能使用字符串,因为字符串是不可变的。但是您可以使用一些字符串包装器-我将在这里使用StringBuilder,因为它是内置的:

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

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

如果这对您有效,请将其标记为已回答。