3

我正在开发一个 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()(in MyViewModel) 时,它不会触发该HasCardSet属性。我已经添加PropertyChangedNotificationInterceptor并看到目标“人物”上的属性“卡片”发生了变化。但是我的断点HasCardSet没有触发。

4

1 回答 1

6

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

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

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

这将触发预期的PropertyChanged事件。

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

于 2015-09-22T11:24:44.523 回答