使用PropertyName attribute of the PropertyChangeEventArgs 找出修改了哪个属性,然后使用一些逻辑将该属性设置为我所称的boundItems。
如果需要,您也可以使用 sender 对象并将其转换为适当的类型,这样可以提供更多的灵活性。使用Reflection 将允许您通过使用PropertyName 的String 值来获取和设置属性,而无需涉及真正的体力劳动,但它的开销要大得多,所以如果您经常这样做,我建议不要这样做。
void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch(e.PropertyName)
{
case "Name":
//You Code
boundItem.Name = (sender as A).Name;
break;
}
}
或者,您可以使用反射来设置属性,而不是构建开关盒。
void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
//Untested Reflection example. Probably needs some modifying.
PropertyInfo prop = typeof(A).GetType()
.GetProperty(e.PropertyName, BindingFlags.Public | BindingFlags.Instance);
PropertyInfo boundProp = typeof(B).GetType()
.GetProperty(e.PropertyName, BindingFlags.Public | BindingFlags.Instance);
boundProp.SetValue (boundItem, prop.GetValue((sender as A),0), null);
}
不过,您最好的选择是创建具有这些关系的类,这些关系内置到对象的属性中。修改属性的get 和set 以同时设置受影响的属性和boundItems 属性。看起来像这样:
class A: INotifyPropertyChanged
{
string PhoneNumber;
string _name;
B BoundItem = null;
Public string Name {
get { return _name;}
set
{
_name = value;
if(BoundItem != null)
BoundItem.Name = value;
}
}
class B
{
string Name;
int age;
}
class Main
{
public Main()
{
A item = new A();
B boundItem = new B();
item.BoundItem = boundItem;
item.Name = "TEST";
Console.WriteLine("Item Name: " + item.Name);
Console.WriteLine("BoundItem Name: " + boundItem.Name);
// Result:
// Item Name: TEST
// BoundItem Name: TEST
}
}