同一类的两个实例的绑定属性,非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;
}
}
}
}
请尝试此操作。。通过在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。您甚至可以使用隐式运算符重载将其从字符串自动转换。