Каким будет умный дизайн для слоистых панелей? - PullRequest
3 голосов
/ 26 октября 2010

Я хотел бы создать легкое приложение «Список участников / редактирование» в одном-единственном окне.

Я предполагаю, что лучший и самый простой способ добиться этого - это разместить на панели часть «листинга» (в основном, сетку данных и некоторые элементы поиска), а «редактирование» (новый или измененный элемент) на другая, каждая панель скрывает другую в зависимости от того, что пользователь хочет сделать. Это то, что я должен закончить, визуально говоря.

Я думал о многих способах разработки этого, но никто не звучал на самом деле хорошо для меня, главным образом, когда дело доходит до создания экземпляра модели представления панели редактирования, передавая выбранный элемент в dgv панели списков или тому подобное. Я все еще считаю себя новичком в WPF и уверен, что самое умное решение - это то, что мне не пришло в голову.

Не могу дождаться, чтобы прочитать предложения экспертов;)

1 Ответ

2 голосов
/ 27 октября 2010

Вы должны больше думать о DataTemplate.

Разделите два разных взгляда, например.MemberListingView.XAML и MemberEditView.XAML.Создайте модели представлений для каждого представления.

Чтобы собрать все воедино, используйте технику шаблонов данных:

<DataTemplate DataType="{x:Type vm:MemberListingVM}">
    <AdornerDecorator>
        <views:MemberListingView />
    </AdornerDecorator>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:MemberEditVM}">
    <AdornerDecorator>
        <views:MemberEditView />
    </AdornerDecorator>
</DataTemplate>

// Now use a content presenter
<ContentPresenter Content="{Binding CurrentView}" />

Где-то в вашем контексте должно быть свойство, определяющее текущее представлениевам нужно показать.

private ViewModelBase _currentView;
public ViewModelBase CurrentView
{
    get { return _currentView; }
    set
    {
        _currentView = value;
        RaisePropertyChanged("CurrentView");
    }
}

// ...
public void OnSelectedMemberChanged(Member member)
{
    // Depending on your logic
    // If some condition...
    CurrentView = new MemberEditVM(member);
    // else
    CurrentView = MemberListingVM;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...