我有一个班级,还有很多实例。我需要将一个实例的属性绑定到另一个实例。所以在我的例子中,我需要将实例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;
}
}
}
}
答案 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运算符重载来自动将其从字符串转换。