2011-01-28 12 views
5

Estoy usando RelayCommands en mis ViewModels para deshacerse de los códigos detrás. Los RelayCommands funcionan, excepto en esta situación: el ViewModel en el que se definen los RelayCommands se cambia con el cambio del contexto de datos. Si un comando se activa después de que cambie el contexto de datos, se dispara en el "viejo" modelo de vista. Mientras estoy depurando puedo ver que las propiedades son del antiguo contexto de datos. Pero en la vista todo está bien porque se muestran los datos correctos del modelo de vista correcto.RelayCommand llamado en "viejo" DataContext

Entonces, ¿es posible que los comandos limitados no puedan reaccionar ante un cambio en el contexto de datos? ¿O podría estar pasando algo más?

Aquí un recorte del código:

<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> 

El DataContext de la tabcontrol está correctamente cambiando, pero después de cambiar el comando que se está llamando en el antiguo DataContext.

+0

que he tenido exactamente el mismo problema con los enlaces en contextmenus. Supongo que simplemente actualizaría manualmente el enlace cuando cambie el contexto de datos. – Botz3000

Respuesta

0

@Rick. El motivo del voto a favor:

  1. No responde la pregunta del OP. Está depurando el contexto de datos, estás haciendo todo en XAML.

  2. No funciona para mí. Supongo que esto se debe al mismo error que notó el OP.

Para ser justos, este no es su culpa: es claramente un error en la forma en que Microsoft está manejando DataContext herencia para contextmenus, pero no parece que su respuesta a haber resuelto el problema de la OP, ni el mío .

enter image description here