1) You can inherit View1Model and View2Model from one base ViewModel and define ShowMainMenu there.
or (this is my approach)
RootView ContentPresenter, . RootVeiwModel ViewContent. contenttty ContetnPresenter ViewContent RootViewModel. object ViewContent, , MainVView1Model, View1Model View2Model. ViewContent ProprtyChangedEvent.
ShowMainViewCommand RootViewModel, ViewContent MainViewModel ( MainView). Command Button View1 View2 , :
{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type RootView}},
Path=DataContext.ShowMainViwe}
, , :
RootView.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)
{
_AddItemToUC2 = new RelayCommand(x => _Parent.UC2Content.Items.Add(...));
}
return AddItemToUC2;
}
}
...
}