MVVM Замена элементов управления - PullRequest
0 голосов
/ 20 ноября 2010

Я новичок в C # и пытаюсь изучить MVVM, создав простое приложение Crud.В моем приложении я хочу иметь ряд кнопок, которые, когда пользователь нажимает на него, загружают этот пользовательский элемент управления.Поэтому, когда вы нажимаете «Добавить элемент», он заменяет существующий элемент управления на AddItemView.Мне было интересно, как я об этом?Многие учебники по mvvm, которые я видел до сих пор, имеют только один элемент управления MainMindow.

1 Ответ

3 голосов
/ 20 ноября 2010

Для такого рода задач вы обычно используете ContentControl.Свяжите свойство Content элемента управления со свойством вашей ViewModel (например, CurrentViewModel) и определите DataTemplates в ресурсах для каждого типа ViewModel, которые могут отображаться в ContentControl.Когда вы назначаете ViewModel для CurrentViewModel, ContentControl выберет соответствующий DataTemplate для содержимого.

Main ViewModel

private object _currentViewModel;
public object CurrentViewModel
{
    get { return _currentViewModel; }
    set
    {
        if (value != _currentViewModel)
        {
            _currentViewModel = value;
            OnPropertyChanged("CurrentViewModel");
        }
    }
}

App.xaml

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:AddItemViewModel}">
        <v:AddItemView />
    </DataTemplate>
    <DataTemplate DataType="{x:Type vm:FooViewModel}">
        <v:FooView />
    </DataTemplate>
    <DataTemplate DataType="{x:Type vm:BarViewModel}">
        <v:BarView />
    </DataTemplate>
    ...
</Application.Resources>

Главный вид

...
<ContentControl Content="{Binding CurrentViewModel}" />
...

В вашем случае в команде для кнопки «Добавить элемент» вы назначаетеэкземпляр от AddItemViewModel до CurrentViewModel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...