Я буду честен, я думаю, вам нужно немного перемотать и прочитать хорошую книгу о MVVM, прежде чем продолжить.Pro WPF and Silverlight MVVM
Гэри Маклина Холла - хорошее место для начала.
Чтобы ответить на ваш вопрос, я предполагаю, что этот пользовательский элемент управления настроен с его DataContext, указывающим на ваш MainViewModel
.Для содержимого справа требуется соответствующее свойство в модели основного вида, например что-то вроде:
private ViewModelBase _CurrentPage;
public ViewModelBase CurrentPage
{
get { return this._CurrentPage; }
set
{
if (this._CurrentPage != value)
{
this._CurrentPage = value;
RaisePropertyChanged(() => this.CurrentPage);
}
}
}
Затем вы создаете группу «страниц» или что-то, что наследует ViewModelBase
, то есть Page1ViewModel
, Page2ViewModel
, SettingsViewModel
и т. Д. Затем вы создаете ContentControl
и привязываете его содержимое к этому свойству:
<ContentControl Content="{Binding CurrentPage}" />
Так что теперь, если ваша модель представления делает что-то вроде CurrentPage = new SettingsViewModel()
, тогда ContentControl
будетбыть заполненным тем, что вы объявили как DataTemplate для этого типа (то есть элемент управления типа views:SettingsView
).Если вы назначите это свойство чему-то другому, то SettingsView
будет уничтожен и заменен тем, каким будет DataTemplate для нового типа.
В приведенном выше примере будет работать только SettingsViewModel / SettingsView, потому что это все, что вам нужномы создали DataTemplate для;чтобы это работало, вам нужно создать отдельный DataTemplate для каждого создаваемого вами типа ViewModel / View.