У нас есть решение на 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, так что мы довольно много учимся на ходу ...
Спасибозаранее!