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

时间:2014-09-25 09:08:45

标签: c# .net

我有一个班级,还有很多实例。我需要将一个实例的属性绑定到另一个实例。所以在我的例子中,我需要将实例b的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;
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

请尝试这个..通过在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;
            }
        }
    }
}

答案 1 :(得分:0)

没有办法完全按照自己的意愿行事。 a.Symbol和b.Symbol曾经指向相同的值,但是一旦你改变了一个符号的值,那就是它,它们现在是不同的。

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

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

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