Где я должен установить DataContext - код или xaml? - PullRequest
11 голосов
/ 11 мая 2010

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

Есть два разныхспособы (по крайней мере), чтобы установить DataContext.Можно использовать XAML или другой код.

Что такое «лучшая практика» и почему?

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

Ответы [ 4 ]

4 голосов
/ 11 мая 2010

Третий способ, которым вы можете воспользоваться, - использовать службу локатора. У меня обычно есть один класс, который отвечает за создание всего моего DataContext (виртуальные машины в большинстве случаев для меня), и я создаю экземпляр этого класса в ресурсах App.xaml. Затем я связываю DataContext в XAML каждой отдельной страницы.

т.е.

<Page DataContext="{Binding ViewModel,Source={StaticResource Locator}}" >
2 голосов
/ 11 мая 2010

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

Лично я всегда делаю это в коде моих взглядов, потому что нахожу это в целом чище, и именно так меня учили MVVM. Еще одна вещь, которую нужно иметь в виду, это то, что иногда вам может понадобиться изменить текст данных в зависимости от того, с чем вы работаете. Если это так, то гораздо проще / проще сделать это в коде, а не в XAML.

1 голос
/ 12 мая 2010

Как видно по ответам, пока мнения разделились. По правде говоря, лучшей практики не существует (я получаю в своем бонете информацию о «лучшей практике» в мире Silverlight, она слишком молода, чтобы лучшая практика была по-настоящему известна).

На самом деле реальность такова, что вы не можете установить «контекст данных» в Xaml. Если вы на самом деле не создаете экземпляр объекта следующим образом: -

<UserControl>
  <UserControl.DataContext>
    <local:MyDataProviderThing />

В конечном итоге что-то внешнее должно назначать свойство DataContext прямо или косвенно через другое свойство или через привязку (как в ответе Стефана). Это внешний контекст, который определяет, имеет ли смысл делать это в Xaml или нет. Многие решения MVVM используют привязку в Xaml, в некоторых случаях просто для того, чтобы вообще не было никакого кода в выделенном коде, вместо того, чтобы действительно быть «лучше». Другие устанавливают DataContext в коде, используя базовый класс, из которого происходит ваш элемент управления.

0 голосов
/ 11 мая 2010

DataContext пользовательского элемента управления / просмотра я предполагаю? Одним из преимуществ установки контекста данных в коде является доступность внедрения зависимостей. Ваш DI-контейнер может динамически заботиться о любых зависимостях для вас во время выполнения.

С этим шаблоном я часто устанавливаю дизайн BConnd представления DataContext в xaml, используя d: DataContext «Проектная версия» может предоставлять фиктивные данные для использования в Blend, в то время как истинная реализация определяется во время выполнения.

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