2012-03-18 36 views
2

INotifyPropertyChanged有点麻烦。我实施了很多次,但这种情况有所不同。我想创建以下应用: mockupINotifyPropertyChanged无法正常工作

有多个标签的容器,这必将对实体的不同ObservableCollections。现在我想显示当前(最后)选择的实体的名称。为了实现这一点,我创建了在Window类中创建的DependencyProperty CurrentEntity,并通过TabControls上的SelectionChanged指定当前实体。

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

的TextBlock;其中,在上面的图片,显示VideoA看起来是这样的:

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

现在,每当我选择一个新的选项卡,在TextBlock的文本随之改变。但是,当我更改实体的名称(在Tab中同时绑定到实体的TextBox内部)时,TextBlock中的文本不会更改。我必须选择另一个选项卡,然后返回到更改名称的选项卡,以在TextBlock中查看新输入的名称。基本上,这是我的问题,我希望看到文本更改,而不先选择另一个Tab(是的,我输入新名称后,从Tab中的TextBox取消聚焦)。

有没有人有问题的地方?

我的“架构”这个样子的(或多或少;-)): uml

+4

你给出的小代码甚至没有意义。您设置CurrentEntity,然后绑定到CurrentElement。这是什么?请只发布你的代码,而不是(或者 - 除了)更好的图表。否则,这只是我们猜测的游戏。 – 2012-03-18 19:32:14

+0

这是CurrentEntity,而不是CurrentElement,谢谢你指出了这一点。我不认为发布几行代码会使事情变得更容易,尤其是因为怀疑它与整体设计有关,而与代码无关。但是,我会尝试粘贴一些有意义的内容,而不需要从3个文件中复制整个代码;-) – 2012-03-19 10:17:31

+0

什么是“TextBox”绑定的外观?我最好的猜测是'CurrentEntity'被绑定到与TabControl'不同的项目副本。你可以通过发现是否存在'CurrentEntity == SomeItemCollection [SelectedIndex]' – Rachel 2012-03-19 13:05:24

回答

-1

的ObservableCollection只是意味着更新UI的事件拉开序幕,当收集的变化,添加,删除,重订单等

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

ObservableCollection内部的对象是否实现INotifyPropertyChanged?

+0

来做一个快速的检查。正如你在上面看到的,我提到过,该实体实现了INotifyPropertyChanged。 – 2012-03-19 10:18:00

+0

我特赦的达努,我当然错过了。 – Rhyous 2012-03-19 19:04:50

+0

没问题的朋友。 – 2012-04-09 17:06:37