1)您可以從一個基本ViewModel繼承View1Model和View2Model並在其中定義ShowMainMenu。
或(這是我的方法)
創建ContentPresenter RootView它會顯示所有的觀點。使用屬性ViewContent創建RootVeiwModel。將ContetnPresenter的內容屬性綁定到RootViewModel的ViewContent屬性。您可以使用object
作爲ViewContent類型,但我建議您定義MainVView1Model,View1Model和View2Model支持的接口。更改ViewContent必須引發ProprtyChangedEvent。 在RootViewModel中定義ShowMainViewCommand,它將ViewContent更改爲MainViewModel(它將顯示爲MainView)。
{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type RootView}},
Path=DataContext.ShowMainViwe}
有一些代碼來解釋什麼,我想說:
RootView然後在視圖1和視圖2巴頓指揮的屬性,方法綁定到該命令,exmple。XAML
...
<ContentPresenter Content={Binding ViewContent} />
...
RootViewModel.ca
class RootViewModel : INotifyPropertyCahnged
{
...
private object _ViewContent;
public object ViewContent
{
get {return _ViewContent;}
set
{
_ViewContent = value;
if (PropertyChanged != null)
{
PropertyChanged ("ViewContent");
}
}
}
private RelayCommand _ShowMainView;
public ICommand ShowMainView
{
get
{
if (_ShowMainView == null)
{
_ShowMainView = new RelayCommand(x => ViewContent = new MainViewModel());
}
return _ShowMainView;
}
}
...
}
2)MainViewModel添加參考UC1ViewModel和UC2ViewModel - 那影響其他控制的方式。 MainViwModel必須包含包含UC1ViewModel和UC2ViewModel的屬性。第二個用戶控件的項目必須包含在ObservableCollection中。
我只是告訴你它是如何工作的代碼:
class UC1ViewModel : INotifyPropertyChanged
{
...
private MainViewModel _Parent;
public UC1ViewModel(MainViewModel parent)
{
_Panert = parent;
}
private RelayCommand _AddItemToUC2;
public ICommand AddItemToUC2
{
get
{
if (_AddItemToUC2 = null)
{
// UC2Content is UC2ViewModel
// Items is ObservableCollection
_AddItemToUC2 = new RelayCommand(x => _Parent.UC2Content.Items.Add(...));
}
return AddItemToUC2;
}
}
...
}
在第〔實施例設置 ViewContent =新MainViewModel()); 這應該是一個Window/UserControl?或者你真的把目前的內容設置爲視圖模型? – thrag 2009-12-06 05:17:44
它是查看模型。如果將ContentPresenter放置在視圖中並將Content屬性綁定到ViewModel,則它將顯示爲關聯的視圖。您是否使用如下所示的view-viewmodel關聯: DataTemplate> –
bniwredyc
2009-12-06 14:55:11