2010-11-25 7 views
2

In einer Prism V4/MEF/MVVM App, ich habe eine Ansicht mit einem TabControl.Laden TabItem Inhalt, wenn es (nicht vorher) in MVVM ausgewählt wurde

In der ersten TabItem zeige ich eine Liste von Elementen, die zweite TabItem ist deaktiviert, es sei denn ein gültiges Element ausgewählt ist. Wenn der Benutzer jetzt auf das zweite TabItem klickt, möchte ich einige zusätzliche Daten in das zweite TabItem laden.

Wie erfahre ich TabItem Änderungen in MVVM?

Antwort

6

Ich denke, du meinst Lazy Loading. Starten Sie dieses Beispiel und setzen Sie den Debug-Haltepunkt in den ContentViewModel-Konstruktor.

public MainWindow() 
    { 
     InitializeComponent(); 
     var items = new List<TabItemViewModel> 
     { new TabItemViewModel{Title="Tab 1", Content = new Lazy<ContentViewModel>(() => new ContentViewModel(1))}, 
      new TabItemViewModel{Title="Tab 2", Content = new Lazy<ContentViewModel>(() => new ContentViewModel(2))} 
     }; 
     tab.ItemsSource = items; 
    } 

    public class TabItemViewModel 
    { 
     public string Title { get; set; } 
     public Lazy<ContentViewModel> Content { get; set; } 
    } 

    public class ContentViewModel 
    { 
     public ContentViewModel(int i) 
     { 
      this.SomeText = "Loaded tab "+i; 
     } 
     public string SomeText { get; set; } 
    } 

XAML-Vorlagen:

+0

Cool, fast, was ich will. Die einzige Frage, die mir noch bleibt: Wie aktualisiere ich den Tab-Inhalt * jedes Mal, wenn der Benutzer zu ihm wechselt (oder ihn weiterhin aktualisiert, während er sichtbar ist)? – Sam

+1

Lazy <> class Verzögerung eine Initialisierung. Wenn Sie jedes Mal initialisieren möchten, können Sie einen ähnlichen Wrapper mit Func <> als Konstruktorparameter und Eigenschaft "Value" schreiben. Oder Sie können TabItemViewModel.Content als schreibgeschützte Eigenschaft neu schreiben, die immer ein neues Objekt zurückgibt. – vorrtex

Verwandte Themen