假设我有一个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/

10-11 23:59
查看更多