2011-01-28 10 views
5

Sto usando RelayCommands nei miei ViewModels per liberare il codice dietro. I RelayCommands funzionano, tranne in questa situazione: il ViewModel in cui sono definiti i RelayCommands viene modificato con la modifica del datacontext. Se viene eseguito un comando dopo la modifica del datacontext, viene generato nel "vecchio" viewmodel. Durante il debug posso vedere che le proprietà provengono dal vecchio datacontext. Ma nella vista è tutto a posto perché vengono visualizzati i dati corretti del modello di visualizzazione corretto.RelayCommand chiamato "vecchio" DataContext

Quindi è possibile che i comandi limitati non siano in grado di reagire a una modifica del datacontext? Oppure potrebbe esserci qualcos'altro che non va?

Ecco un elemento di cattura del codice:

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

DataContext del TabControl è correttamente cambiando, ma dopo aver cambiato il comando viene chiamato nel vecchio DataContext.

+0

Ho avuto esattamente lo stesso problema con attacchi su contextmenus. Immagino che vorrei semplicemente aggiornare manualmente il binding quando cambia il datacontext. – Botz3000

risposta

0

@Rick. Il motivo per il downvote:

  1. Non risponde alla domanda dell'OP. Sta eseguendo il debug del contesto dei dati, stai facendo tutto in XAML.

  2. Non funziona per me. Presumo che ciò sia dovuto allo stesso bug che l'OP ha notato.

Per essere onesti, questo non è colpa tua: è chiaramente un bug nel modo in cui Microsoft sta gestendo DataContext eredità per contextmenus, ma la risposta non sembra aver risolto il problema del PO, né mia .

enter image description here