Путаница с WPF MVVM - PullRequest
       20

Путаница с WPF MVVM

0 голосов
/ 15 мая 2009

Я скачал документ о MVVM из CodePlex, но я не понимаю эту диаграмму.

альтернативный текст http://img194.imageshack.us/img194/3959/diagram.png

В документе ContactView никогда не устанавливает свой DataContext равным ContactViewModel, поэтому я не понимаю, почему эта диаграмма показала, что ContactView ссылается на ContactViewModel через DataContext.

Я не знаю, когда он устанавливает ContactView.DataContext, или в документе отсутствует эта точка?

Ответы [ 2 ]

2 голосов
/ 15 мая 2009

Вы должны прочитать эту статью Джоша Смита, после этого все станет намного яснее ...

1 голос
/ 15 мая 2009

Возможно, нет необходимости специально устанавливать DataContext, если контакты отображаются в виде списка или что-то подобное.

Если для datacontext списка отображается свойство Contacts из MainViewModel, то для каждого элемента данных будет автоматически задан конкретный объект ContactViewModel, который может инициировать представление элементов с помощью элемента управления ContactView, предполагая, что определенный шаблон привязки были установлены ранее в документе.


Извините, у меня были проблемы с codeplex, и мне только что удалось получить документ для загрузки. Блок кода перед диаграммой подтверждает мое подозрение:

<Grid>
    <ListBox ItemsSource="{Binding Contacts}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <views:ContactView />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

Поскольку ListBox привязан к коллекции Contacts ObservableCollection, каждый ListItem будет иметь свой DataContext, установленный для конкретного объекта, с которым он связан. DataTemplate настроен для отображения каждого элемента в качестве элемента управления ContactView. Поэтому DataContext ContactView будет установлен на правильный объект Contact из коллекции, все это происходит за кулисами, и вам не нужно фактически устанавливать свойство самостоятельно.

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