gpt4 book ai didi

c# - PropertyChangedEventHandler 如何获取值?

转载 作者:行者123 更新时间:2023-11-30 14:34:50 25 4
gpt4 key购买 nike

所以我已经将事件设置为一个类

    void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
}

当类的属性发生更改时它会被触发,但是我想在类似的类中进行相同的更改。以此为例

class A: INotifyPropertyChanged
{
//event handler declaration

string PhoneNumber;

string _name;
Public string Name {
get { return _name;}
set { _name = value; PropertyChanged("Name");}
}
}

class B
{
string Name;
int age;
}

和类 A 的事件绑定(bind);

    void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
}

我想要的是复制A的Name属性的内容,赋值给B的一个实例。

这样做的优雅方法是什么?我的问题是知道 A 的哪个值发生了变化(在我的类(class)中,它不仅是名字,还有更多)。

最佳答案

使用 PropertyName attribute of the PropertyChangeEventArgs找出修改了哪个属性,然后使用一些逻辑将该属性设置为我正在调用的 boundItems

如果需要,您也可以使用发送者对象并将其转换为适当的类型,这样可以提供更多的灵 active 。使用 Reflection 将允许您通过使用 PropertyNameString 值来获取和设置属性,而无需真正的人工劳动,但它是更多的开销,所以如果你经常这样做,我建议不要这样做。

void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch(e.PropertyName)
{
case "Name":
//You Code
boundItem.Name = (sender as A).Name;
break;
}
}

或者,您可以使用反射来设置属性,而不是构建 switch case。

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);
}

不过,您最好的选择是创建具有内置于对象属性中的这些关系的类。修改属性的 getset 以同时设置受影响的属性和 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
}
}

关于c# - PropertyChangedEventHandler 如何获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13294662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com