2011-04-20 127 views
1

我有一個使用MVVM的WPF應用程序;當我在我的主窗口ViewModel類中更改ViewModel時,新的用戶控件不會顯示在窗口中...原始的控件仍然存在。該視圖模型是這樣的:更改ViewModel時窗口不會更新

public class MainWindowViewModel : ViewModelBase {

public ViewModelBase Workspace; 

    public MainWindowViewModel() 
    { 
     var w = new CustomerDetailsViewModel(); 

     SetActiveWorkspace(w); 
    } 

    void NavigationService_ViewChanged(object sender, ViewChangedEventArgs e) 
    { 
     SetActiveWorkspace(e.View); 
    } 

    void SetActiveWorkspace(ViewModelBase workspace) 
    { 
     Workspace = workspace; 
    } 
} 

我的XAML看起來像這樣: < ContentControl Content="{Binding Path=Workspaces}" >

導航服務ViewChanged事件被解僱,並SetActiveWorkspace方法被調用的參數正確的觀點。但是,之後,視圖不會重新加載。我在這裏錯過了什麼?

+0

是否要更新視圖的DataContext屬性到新的虛擬機? – 2011-04-20 17:58:51

+0

不,我不是,但我不認爲我需要......我爲什麼? – drowned 2011-04-20 18:18:55

+0

您表示您正在更換虛擬機。視圖的DataContext是VM,所有綁定都是相對於DataContext的。該視圖需要將正確的VM作爲DataContext。 – 2011-04-20 21:28:44

回答

2

您的Workspace屬性不會引發PropertyChanged事件。它應該是這樣的:

private ViewModelBase _workspace; 

public ViewModelBase Workspace 
{ 
    get { return _workspace; } 
    set 
    { 
     if (value != _workspace) 
     { 
      _workspace = value; 

      // This raises the PropertyChanged event to let the UI know to update 
      OnPropertyChanged("WorkSpace"); 
     } 
    } 
} 

確保您ViewModelBase實現INotifyPropertyChanged

+0

我認爲這是它,非常感謝。 – drowned 2011-04-20 18:19:45