MVVM: как избежать добавления DataContext в Xaml для поддержки Blend - PullRequest
1 голос
/ 18 ноября 2010

У нас есть решение на C #, основанное на свободном Xaml (или Hosted Xaml - никогда не было уверенности в правильности термина!).Но в основном мы берем файл Xaml и загружаем его в XamlReader, а затем вставляем этот FrameworkElement в UserControl.Нам нужна способность обрабатывать привязку данных, и у нас есть ViewModel, которая позаботится об этом.Однако, хотя я могу внедрить DataContext с помощью кода, установив его во вновь созданном FrameworkElement, если я хочу легко работать с Blend и использовать встроенный список привязываемых свойств, когда вы выбираете опцию «Связывание данных ...» наМне нужно установить DataContext прямо в Xaml (если не Blend добавит его в Xaml). Я бы предпочел не делать этого, потому что, как я уже сказал, я делаю это уже с помощью кода.

Вопрос в том, есть ли способ избежать этого?

Я думал о том, чтобы сделать это как-то через app.xaml, но проблема в том, что экран зависит от того, когда он отображается.контекста (поэтому мы динамически меняем контекст), и я почти уверен, что вы не можете загружать в нескольких контекстах данных.

Возможно, есть лучший способ разделить это. Наше решение имеет следующее: -

  • Приложение WPF с MainWindow.xaml (основное приложение)
  • Пользовательский элемент управления в отдельной сборкете, которые помещаются в MainWindow.xaml основным приложением WPF (см. выше)
  • Этот пользовательский элемент управления затем привязывается к модели представления
  • Основное приложение устанавливает DataContext при прохождении через него.встроенный конечный автомат.
  • Все файлы Loose Xaml хранятся в основном приложении.

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

Но я не смог найти много информации о Tinterweb вокруг Loose Xaml, так что мы довольно много учимся на ходу ...

Спасибозаранее!

1 Ответ

1 голос
/ 25 февраля 2011

Вы пробовали d: DataContext = {d: DesignInstance ...}? Он позволяет вам определять DataContext только для времени разработки, для Blend и VS.

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