Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
course_(Windows&Web).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.68 Mб
Скачать

Создание модели представления через xaml.

Возможно, самый простой подход для представления – это декларативно инстанцировать его соответствующую модель представления в XAML. Когда представление будет создано, также будет создан соответствующий объект модели представления. Можно также задать в XAML, что модель представления будет установлена как контекст данных представления.

<UserControl.DataContext> <my:MyViewModel/> </UserControl.DataContext>

Этот подход требует, чтобы у вашей модели представления был конструктор по умолчанию (без параметров).

У декларативного создания и присвоения модели представления представлением есть преимущество в том, что он прост и хорошо работает в инструментах времени проектирования, таких как Microsoft Expression Blend или Microsoft Visual Studio. Недостаток этого подхода в том, что у представления есть знание о соответствующей модели представления.

Создание модели представления программно.

Представление инстанцирует соответствующий экземпляр модели представления программно в конструкторе. Оно может установить его как свой контекст данных, как показано в следующем примере.

public MyView() { InitializeComponent(); this.DataContext = new MyViewModel(); }

У программируемого создания и присвоения модели представления в пределах code-behind представления есть преимущество в том, что этот способ прост и хорошо работает в инструментах времени проектирования как Expression Blend или Visual Studio. Недостаток этого подхода в том, что представление должно знать о соответствующем типе модели представления, и что он требует кода в code-behind представления. Используя контейнер внедрения зависимости, такой как MEF, можно помочь обеспечить слабую связь между моделью представления и представлением.

Создание представления, определенного как шаблон данных.

Представление может быть определено как шаблон данных и связано с типом модели представления. Шаблоны данных могут быть определены как ресурсы, или могут быть определены как встроенные, в пределах элемента управления, который отображает модель представления. «Контент» элемента управления является экземпляром модели представления, и шаблон данных используется для её визуального представления. WPF и Silverlight автоматически инстанцируют шаблон данных и установят его контекст данных в экземпляр модели представления во время выполнения. Этот метод является примером ситуации, в которой в начале инстанцируют модель представления, а уже потом – представление.

Шаблоны данных гибки и легковесны. Разработчик UI может использовать их, чтобы легко определить визуальное представление модели представления, без какого-либо сложного кода. Шаблоны данных ограничиваются представлениям, которые не требуют никакой логики UI (code-behind). Для визуальной разработки и редактирования шаблонов данных, может использоваться Microsoft Expression Blend.

Следующий пример показывает ItemsControl, который связан со списком клиентов. Каждый объект потребителя в базовой коллекции является экземпляром модели представления. Представление для клиента определяется встроенным шаблоном данных. В следующем примере представление для каждой потребительской модели представления состоит из StackPanel с меткой и текстовым полем, связанным со свойством Name модели представления.

<ItemsControl ItemsSource="{Binding Customers}"> <ItemsControl.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock VerticalAlignment="Center" Text="Customer Name: "/> <TextBox Text="{Binding Name}" /> </StackPanel> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl>

Можно также задать шаблон данных как ресурс. Следующий пример показывает шаблон данных, определённый как ресурс и применённый к элементу управления через расширение разметки StaticResource.

<UserControl ...> <UserControl.Resources> <DataTemplate x:Key="CustomerViewTemplate"> <local:CustomerContactView /> </DataTemplate> </UserControl.Resources> <Grid> <ContentControl Content="{Binding Customer}" ContentTemplate="{StaticResource CustomerViewTemplate}"> </Grid> </Window>

Здесь, шаблон данных обертывает конкретный тип представления. Это позволяет представлению определять поведение code-behind. Таким образом, шаблонный механизм данных может использоваться для того, чтобы поверхностно предоставить связи между представлением и моделью представления. Хотя предыдущий пример показывает шаблон в ресурсах UserControl, его часто помещают в ресурсы приложения для повторного использования.

Краткие итоги

WPF/Silverlight может предложить разработчикам приложений очень многое, нужно начать мыслить немного иначе, чтобы научиться пользоваться этими возможностями. Шаблон MVVM — простой и эффективный набор рекомендаций для проектирования и реализации приложений WPF/Silverlight. Он позволяет разделять данные, поведение и представление.

Набор для практики

Вопросы:

  1. Паттерн MVVM и его предназначение.

  2. Альтернативные решения паттерна MVVM.

  3. Роль модели в паттерне MVVM.

  4. Роль представдения в паттерне MVVM.

  5. Роль модели представления в паттерне MVVM.

Тесты

Задача 1.

Вариант 1 Задачи 1.

В MVVM для представления не свойственна характеристика:

Ответ 1. является визуальным элементом, таким как окно, страница, пользовательский элемент управления или шаблон данных. Определяет элементы управления, их компоновку и стиль

Ответ 2. определяет логику UI, чтобы реализовать визуальное поведение, которое трудно выразить в XAML

+ Ответ 3. координирует взаимодействие представления с моделью. Она может преобразовать или управлять данными так, чтобы они могли быть легко использованы представлением, и может реализовать дополнительные свойства, которые, возможно, не присутствуют в модели

Ответ 4. может настроить поведение привязки данных между представлением и моделью представления

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]