我具有以下类结构,并且当另一个类的属性发生更改时,我试图触发类中的事件。 C类的prop属性绑定到一个checkbox元素,因此每次用户勾选或取消选中该框时-因此,当它从true变为false或反之亦然时-我想将该消息传递给A类,以便它可以运行 MethodTriggeredByChangeinProp。我需要A类来知道B类的哪个实例,以及B中C类的哪个实例正在触发该方法。我唯一能想到的就是使listC成为可观察的集合,并在B类中添加propertychanged事件,但是随后我对从那里去然后喜欢它到A类感到迷惑。不胜感激!谢谢。
public class A{
List<B> listB;
void MethodTriggeredByChangeinProp(){
}
}
public class B{
List<C> listC;
}
public class C{
public bool Prop{ get; set; }
}
答案 0 :(得分:0)
只需INotifyPropertyChanged
并跟踪“所有者”即可实现。
C类将跟踪属性更改,但在构造时将接受B owner
和A notifyMe
对象:
public class C : INotifyPropertyChanged
{
public C(B owner, A notifyMe)
{
Owner = owner;
PropertyChanged += notifyMe.MethodTriggeredByChangeinProp;
}
public B Owner { get; private set; }
private bool prop;
public bool Prop
{
get => prop;
set
{
prop = value;
NotifyPropertyChanged();
}
}
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
public event PropertyChangedEventHandler PropertyChanged;
}
B类实际上不需要特殊,除非您想知道何时将C类对象添加到列表中-然后您需要进行ObservableCollection
设置;否则,List<C>
可以。
A类的MethodTriggeredByChangeinProp
稍有变化:
public class A
{
public List<B> listB;
public void MethodTriggeredByChangeinProp(object sender, PropertyChangedEventArgs e)
{
if(sender is C responsibleC)
{
var responsibleB = responsibleC.Owner;
var changedProp = e.PropertyName;
}
}
现在,只要C中的属性发生更改,您就知道A中B类和C类的负责实例。
您可能还想看看Observer Pattern in .NET以获得更深入的配置。