【问题标题】:INotifyPropertyChanged not working as expectedINotifyPropertyChanged 未按预期工作
【发布时间】:2012-03-18 18:53:20
【问题描述】:

INotifyPropertyChanged 有点麻烦。我实施了很多次,但是这种情况有所不同。我想创建以下应用程序:

有多个选项卡容器,它们绑定到不同的 ObservableCollections 实体。现在我想显示当前(最后)选择的实体的名称。为此,我在 Window 类中创建了一个 DependencyProperty CurrentEntity,并通过 TabControls 上的 SelectionChanged 分配当前实体。

private void SelectionChanged(Object sender, EventArgs e)
{
    CurrentEntity = e.NewItems[0] as Entity;
}

上图中显示 VideoA 的 TextBlock 如下所示:

<TextBlock Text={Binding CurrentEntity.Name}" />

现在,每当我选择一个新选项卡时,TextBlock 中的文本都会相应更改。但是,当我更改实体的名称(在选项卡中的 TextBox 内,也绑定到实体)时,TextBlock 中的文本不会改变。我必须选择另一个选项卡,然后更改回我更改名称的选项卡以查看 TextBlock 中新输入的名称。基本上,这是我的问题,我希望在不先选择另一个 Tab 的情况下看到文本的变化(是的,在输入新名称后,我从 Tab 内的 TextBox 中分散注意力)。

有人知道问题出在哪里吗?

我的“架构”看起来(或多或少 ;-))是这样的:

【问题讨论】:

  • 你给出的小代码甚至没有意义。您设置 CurrentEntity,然后绑定到 CurrentElement。它是哪一个?请只发布您的代码而不是(或者甚至更好地)图表。否则,这对我们来说只是一个猜谜游戏。
  • 这是 CurrentEntity,而不是 CurrentElement,感谢您指出这一点。我不认为发布几行代码会使任何事情变得更容易,尤其是因为怀疑它与整体设计有关,而不是与代码有关。但是,我会尝试将一些有意义的东西粘贴在一起,而不是从 3 个文件中复制整个代码;-)
  • TextBox 绑定是什么样的?我最好的猜测是CurrentEntityTabControl 绑定到的项目副本不同。您可以通过查看 CurrentEntity == SomeItemCollection[SelectedIndex] 来快速检查

标签: wpf binding inotifypropertychanged


【解决方案1】:

ObservableCollection 只是意味着当集合发生变化、添加、删除、重新排序等时,会启动更新 UI 的事件。

更改 ObservableCollection 中项目的属性(例如字符串)实际上不会导致 UI 事件。

ObservableCollection 中的对象是否实现了 INotifyPropertyChanged?

【讨论】:

  • 正如你在上面看到的,我提到过,Entity 实现了 INotifyPropertyChanged。
  • 对不起,Danu,我确实错过了。
猜你喜欢
  • 2019-04-23
  • 1970-01-01
  • 2021-06-04
  • 2022-01-24
  • 2015-05-11
  • 2020-05-15
  • 2014-10-31
  • 2018-02-12
  • 2014-01-20
相关资源
最近更新 更多