Fody PropertyChanged不会触发另一个属性

本文关键字:另一个 属性 PropertyChanged Fody | 更新日期: 2023-09-27 18:14:07

我正在做一个WPF项目。为了避免大量的锅炉代码,我使用Fody PropertyChanged。这是我的问题的一个片段:

[ImplementPropertyChanged]
public class MyViewModel : MyViewModelBase
{
    public bool HasCardSet
    {
        get
        {
            return Person != null && Person.Card != null;
        }
    }
    public void SavePerson()
    {
        Person.Card = new Card();
    }
}
[ImplementPropertyChanged]
public class MyViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public Person Person { get; set; }
}
[ImplementPropertyChanged]
public class Person : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public Card Card { get; set; }
}
[ImplementPropertyChanged]
public class Card : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public string Name { get; set; }
    public ObservableCollection<SomeOtherClass> Items { get; set; }
}

当我调用SavePerson()(在MyViewModel中)时,它不会触发HasCardSet属性。我已经添加了PropertyChangedNotificationInterceptor,并看到属性"卡"在目标"人"上发生了变化。但是我在HasCardSet中的断点没有触发。

Fody PropertyChanged不会触发另一个属性

您的HasCardSet属性必须在Person类中声明。

然后,按照文档中的建议,添加这个方法:

public void OnCardChanged()
{
    HasCardSet = Card != null;
}

这将触发预期的PropertyChanged事件。

注意,你的Binding应该有你的Person对象作为DataContext,而不是直接你的视图模型。