RelayCommand在“旧”DataContext中调用

时间:2011-01-28 08:15:26

标签: wpf mvvm command datacontext relaycommand

我在我的ViewModel中使用RelayCommands来消除后面的代码。除了这种情况外,RelayCommands正在工作:定义了RelayCommands的ViewModel随着datacontext的更改而改变。如果在datacontext更改后触发命令,则会在“旧”视图模型中触发该命令。在调试时我可以看到属性来自旧的datacontext。但是在视图中一切都很好,因为显示了正确的视图模型的正确数据。

那么有界命令是否有可能无法对datacontext的更改作出反应? 或者可能还有其他错误?

这里有一段代码:

<TabControl x:Name="TestView" DataContext="{Binding Path=SelectedParentElement}" 
                TabStripPlacement="Top" ItemsSource="{Binding Path=ChildElements, Mode=OneWay}"
                SelectedValue="{Binding Path=SelectedChildElement, Mode=TwoWay}">
<TabControl.ContextMenu>
                    <ContextMenu>
 <MenuItem Header="Klassifikation" Name="Klassifikation">
                                <MenuItem Header="Kindebene" Name="KlassisfizierendNext" Command="{Binding KlassifizierendNextCommand}"/>
                            </MenuItem>
                    </ContextMenu>
                </TabControl.ContextMenu>
.......
            </TabControl>

tabcontrol的datacontext正确更改,但在更改命令后,在旧的datacontext中调用该命令。

2 个答案:

答案 0 :(得分:2)

找到解决方案:http://social.msdn.microsoft.com/Forums/en/wpf/thread/2cbec263-df05-4000-9077-35861fc2fa8e

但似乎是一个错误,datacontext auf contextmenus没有改变。

答案 1 :(得分:0)

@Rick。 downvote的原因:

  1. 它没有回答OP的问题。他正在调试数据上下文,你正在XAML中做所有事情。

  2. 这对我不起作用。我认为这是由于OP注意到的相同错误。

  3. 公平地说,这不是你的错:它显然是微软处理ContextMenus的DataContext继承方式的一个错误,但你的答案似乎没有解决OP的问题,也不是我的问题。

    enter image description here