使用 PropertyChangeEventArgs 的PropertyName 属性来确定修改了哪个属性,然后使用一些逻辑将该属性设置为我正在调用的boundItems
.
如果需要,您也可以使用 sender 对象并将其转换为适当的类型,这样可以提供更多的灵活性。Using将允许您通过仅使用 的值Reflection
来获取和设置属性,而无需涉及真正的手工劳动,但它的开销要大得多,所以如果您经常这样做,我建议您不要这样做。 String
PropertyName
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
andset
以同时设置受影响的属性和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
}
}