Fody PropertyChanged 不会触发另一个 属性

Fody PropertyChanged does not trigger another property

我正在处理一个 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 并看到 属性 "Card" 在目标 "People" 上发生了变化。但是我在HasCardSet的断点没有触发。

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

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

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

这将触发预期的 PropertyChanged 事件。

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