【发布时间】: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绑定是什么样的?我最好的猜测是CurrentEntity与TabControl绑定到的项目副本不同。您可以通过查看CurrentEntity == SomeItemCollection[SelectedIndex]来快速检查
标签: wpf binding inotifypropertychanged