Wednesday, September 15, 2010

MVVM: multiple Views for a single ViewModel

В примерах, которые я показывал до сих пор, всегда был один ViewModel, который связывался только с одним View. Давайте теперь посмотрим, как можно связать ViewModel с несколькими View.

Давайте в демо приложение из предыдущей статьи добавим еще одно окошко DetailsWindow, в котором будем показывать текущее число тегов. XAML для нового окна будет очень простой.


<Window x:Class="MultipleViewsDemo.DetailsWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="150" Height="75"
VerticalContentAlignment="Center" HorizontalContentAlignment="Center"
WindowStartupLocation="CenterScreen"
Title="DetailsWindow"
DataContext="{Binding Main, Source={StaticResource Locator}}">

<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="Number of Tags:" />
<TextBlock Text="{Binding Tags.Count}" Margin="5 0 0 0" />
</StackPanel>
</Window>

Ключевой момент, на который нужно обратить внимание – это привязка свойства DataContext нового окна. Она абсолютно идентична привязке DataContext’a главного окна. Т.е. оба окна привязаны к одному и тому же ViewModel.

DataContext="{Binding Main, Source={StaticResource Locator}}"

Теперь при добавлении новых тегов оба окна будут реагировать на изменения во ViewModel. Главное окно будет показывать новые теги в списке, а в DetailsWindow будет обновляться количество тегов.

Исходный код можно скачать отсюда.

No comments:

Post a Comment