我有一个包含两个其他对象的类。
第一个对象中的变量绑定到WPF
元素,称之为X
。
另一个对象中的类似变量。
我希望在PropertyChanged事件发生时,它会更改第二个对象中的变量。
以下代码对我不起作用:
包含变量的类:(我已注册属性已更改事件)
private Class1 _var1;
public Class1 Var1
{
get { return _var1; }
set
{
_var1= value;
if (_var1!= null)
_var1.PropertyChanged += new PropertyChangedEventHandler(_var1_PropertyChanged);
else
_var1.PropertyChanged -= new PropertyChangedEventHandler(_var1_PropertyChanged);
}
}
void _var1_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if(e.PropertyName=="X")
Var2.X= Var1.X;
}
private Class2 _var2;
public Class2 Var2
{
get { return _var2; }
set { _var2= value; }
}
第1课:
private int _x;
public int X
{
get { return _x; }
set
{
if (_x!= value)
{
_x= value;
NotifyPropertyChanged("X");
}
}
}
第2课:
public int X { get; set; }
PropertyChanged
在第1课中工作,但他没有参加我在包含两个变量的类中创建的事件,为什么?
答案 0 :(得分:0)
我不确定我到底是什么意思,但是如果我有一个我想改变的2个变量的课程,我会尝试以下方法:
首先,定义一些SetAndNotify
方法,否则您会对PropertyChanged
事件感到头疼:
public void SetAndNotify<T>(ref T field, T value, Expression<Func<T>> exp)
{
if (!Equals(field, value))
{
field = value;
OnPropertyChanged(exp);
}
}
将其添加到将处理此事件的某个基类。
其次,在Var1
的你的设置器中,你注册了更改事件而没有设置任何内容,这是故意的吗?
第三个也是最后一个,在setter中更改多个属性没有问题,但要确保它是你更改的公共属性:
private SomeType privateVar1;
public SomeType PublicVar1
{
get { return privateVar1; }
set
{
SetAndNotify(ref privateVar1, value, () => PublicVar1);
MyOtherPublicVar = someNewValue; // this will activate the property's setter.
}
}
我希望这会有所帮助。如果没有,请尝试澄清您的问题。