RelayCommand вызывается в «старом» DataContext - PullRequest
5 голосов
/ 28 января 2011

Я использую RelayCommands в моих ViewModels, чтобы избавиться от кода позади. Команды RelayCommands работают, кроме как в этой ситуации: ViewModel, в котором определены команды RelayCommands, изменяется с изменением текста данных. Если команда запускается после изменения текста данных, она запускается в «старой» модели представления. Во время отладки я вижу, что свойства взяты из старого текста данных. Но в представлении все хорошо, потому что отображаются правильные данные правильной модели представления.

Так возможно ли, что ограниченные команды не способны реагировать на изменение текста данных? Или может быть что-то еще не так?

Вот фрагмент кода:

<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 корректно меняется, но после изменения команда вызывается в старом тексте данных.

Ответы [ 2 ]

2 голосов
/ 03 февраля 2011

Нашел решение: http://social.msdn.microsoft.com/Forums/en/wpf/thread/2cbec263-df05-4000-9077-35861fc2fa8e

Но, похоже, ошибка в том, что контекстное меню datacontext auf не меняется правильно.

0 голосов
/ 20 апреля 2011

@ Рик.Причина понижения:

  1. Не отвечает на вопрос ОП.Он отлаживает контекст данных, вы делаете все в XAML.

  2. Это не работает для меня.Я предполагаю, что это происходит из-за той же ошибки, которую заметил OP.

Если честно, это не ваша ошибка: это явно ошибка в способе обработки Microsoft DataContextнаследование для ContextMenus, но ваш ответ, кажется, не решил проблему OP, ни мою.

enter image description here

...