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
,而不是直接作为您的视图模型。
我正在处理一个 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
,而不是直接作为您的视图模型。