假设我有一个MVVM应用程序,它具有项的ListView和用于编辑所选项的属性(文本)的文本框。
<TextBox Text="{Binding SelectedItem.Text}"/>
<ListBox ItemsSource="{Binding Items}" DisplayMemberPath="Text" SelectedItem="{Binding SelectedItem}"
在我的ViewModel中,我有一个ObservableCollection of Items。每个项目都实现INotifyPropertyChanged并具有requiered属性。如果更改文本框的文本,则列表不会更新,因为我只有一个属性而没有通知:
public class Item : INotifyPropertyChanged
{
public string Text { get; set; }
}
我的问题是:有没有办法像这样不使用PropertyChanged来更新列表的Text-property?
private string _Text;
public string Text
{
...
set
{
_Text = value;
PropertyChanged("Text");
}
}
有没有一种方法可以在更改文本框的文本后直接从 View 中触发PropertyChanged-还是其他方法?
谢谢您的帮助!
最佳答案
好的,我会留下一个答案,而不是一个有点含糊的评论(我这样做是因为,如果您自己发现答案而不是被spoon住,您实际上会学得更好。)。
您留下的previous link指出:
(我的重点是。为求完整,这里是该答案留下的链接:MSDN forums: Data binding without INotifyPropertyChanged)。
以前,您依靠WPF的默认行为,但是当实现INotifyPropertyChanged时,您实际上是在说:“WPF!我想特别具体地告知要通知的内容,以便默认行为可以坐在后面! ”。然后,您无法在Text
属性上添加通知。因此,根据您的编码决策,除非明确触发,否则WPF绑定(bind)将不再检测该类中的属性更改。
我个人总是实现INotifyPropertyChanged,因为即使通过代码更改了值,属性更改仍会得到通知(因为默认情况下使用的PropertyDescriptor不会检测到此情况)。另外,它使我可以灵活地不通知,或在一个属性发生更改时通知多个属性。
关于c# - View 更改后自动INotifyPropertyChanged,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36674655/