2017-01-25 5 views
0

Ich habe einen Catel.Window als Hauptfenster mit einem Menü, und der Hauptinhalt ist:Detach MVVM Blick in Catel

<ContentControl Content="{Binding ActualVM, Converter={catel:ViewModelToViewConverter}}" /> 

Im MainWindowViewModel:

public ViewModelBase ActualVM { get; set; } 

Die MainWindowViewModel setzt ActualVM in der OnExecute-Methoden des Menübefehls. Es funktioniert gut. Ich möchte in der Lage sein, die tatsächliche Ansicht in ein neues Fenster zu trennen. In einem Code Sicht hinter Ich habe folgendes für einen Klick der Schaltfläche:

protected void DetachClick(object obj, RoutedEventArgs e) 
    { 
     ContentPresenter vp = this.GetVisualParent() as ContentPresenter; 
     if (vp != null) 
     { 
      vp.Content = null; 
      var dw = new DetachWindow(); 
      dw.Content = this; 
      dw.Show(); 
     } 
    } 

DetachWindow ist ein „leeres“ Catel.Window mit einem „leeren“ Ansichtsmodell. Es funktioniert auch gut, die Ansicht und das Viewmodell funktionieren im getrennten Fenster, aber wenn ich auf eines der MainWindows-Menüelemente klicke, setzt das MainWindowViewModel die ActualVM, aber die MainWindows zeigt die Ansicht nicht wie vor dem Trennen.

Antwort

1

Der Grund dafür ist, dass Sie die Bindung, wenn mit diesem Code töten:

vp.Content = null; 

Sie setzen sollten den Wert auf der VM die Bindung mit einem auf Null, so wird die Bindung korrekt aktualisiert anstatt sie zu ersetzen neuer Wert.

Eine andere Möglichkeit, die Sie versuchen könnten, ist SetCurrentValue anstelle von .Content = null.

+1

Danke, es funktioniert! –