PropertyChangeEventArgs のPropertyName 属性を使用して、変更されたプロパティを特定し、いくつかのロジックを使用してそのプロパティを、私が呼び出しているものに設定しますboundItems
。
送信者オブジェクトを使用して、必要に応じて適切な型にキャストすることもできます。これにより、柔軟性が少し向上します。を使用すると、 の値をReflection
使用するだけで実際の手作業を伴わずにプロパティを取得および設定できますが、オーバーヘッドがはるかに大きくなるため、これを頻繁に行う場合は使用しないことをお勧めします。 String
PropertyName
void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch(e.PropertyName)
{
case "Name":
//You Code
boundItem.Name = (sender as A).Name;
break;
}
}
または、スイッチ ケースを作成する代わりに、Reflection を使用してプロパティを設定することもできます。
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
}
}