视图更改后自动 INotifyPropertyChanged

Automatic INotifyPropertyChanged after change in View

假设我有一个 MVVM 应用程序,其中包含项目的 ListView 和编辑所选项目的 属性(文本)的文本框。

<TextBox Text="{Binding SelectedItem.Text}"/>
<ListBox ItemsSource="{Binding Items}" DisplayMemberPath="Text" SelectedItem="{Binding SelectedItem}"

在我的 ViewModel 中,我有一个 ObservableCollection of Items。每个项目都实现了 INotifyPropertyChanged 并具有所需的 属性。如果我更改文本框的文本,列表不会更新,因为我只有 属性 而没有通知:

public class Item : INotifyPropertyChanged
{
    public string Text { get; set; }
}

我的问题是:有没有一种方法可以在不使用 PropertyChanged 的​​情况下更新列表的 Text-属性?:

private string _Text;
public string Text
{
  ...
  set
  {
    _Text = value;
    PropertyChanged("Text");
  }
}

有没有办法在更改我的 TextBox 的文本后直接从我的视图触发 PropertyChanged - 或者其他方法?

感谢您的帮助!

好吧,我会留下一个答案而不是一个有点神秘的评论(我这样做是因为如果你自己发现答案而不是被灌输,你实际上会学得更好......)。

您离开的 previous link 状态:

And if you are implementing INotifyPropertyChanged, you are fully responsible to implement the change notification in every setter of the properties which needs to be data bound to the UI. Otherwise, the change will be not synchronized as you'd expect.

(强调我的。为了完成,这里是 link 留下的答案:MSDN forums: Data binding without INotifyPropertyChanged)。

以前您依赖于 WPF 的默认行为,但是当您实现 INotifyPropertyChanged 时,您实际上是在说 "Yo WPF!! I want to be really specific and particular about what gets notified, so that default behavior can take a seat at the back!"。然后,您未能在 Text 属性 上添加通知。因此,根据您的编码决定,WPF 绑定不再检测 属性 中的 class 变化,除非您专门触发它们。

我个人总是实施 INotifyPropertyChanged,因为这样 属性 即使通过代码更改了值(因为默认使用的 PropertyDescriptor 不会检测到这一点),更改仍然会收到通知。此外,它使我可以灵活地不通知,或者在一个更改时通知多个属性。