Как предоставить DataTemplate из призменного модуля
У меня есть приложение WPF, с Prism, мы используем несколько модулей (и в более общем смысле, множество микро-сервисов).
Я ищу лучшие методики предоставления приложению шаблона, который можно использовать для представления модели.
Поскольку я должен сделать это из модуля, я не могу просто создать ResourcesDictionary и добавить его в ресурсы приложения.
Как бы вы это сделали? Наша цель - иметь хорошую изоляцию функций.
1 ответ
Я думаю, что вы не совсем объяснили свою цель или что у вас здесь. С этой оговоркой.
Если вы создали обычный словарь ресурсов в приложении, вы можете объединить его в app.xaml.
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary1.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
И тогда вы можете нацеливать ресурсы в разметке, используя x:Key или неявное моделирование. И шаблон, который нацеливается на тип данных.
Что это делает, это добавляет вещи из вашего словаря ресурсов в своего рода словарь. (Это не совсем словарь) У него есть ключ и значение.
Это сфера всего вашего приложения.
Вы можете ссылаться на вещи там и выключать их. Вы можете объединить другой словарь ресурсов в коде. Как только они окажутся там, они останутся там, пока вы не закроете приложение или не очистите эти ресурсы.
Вы можете прочитать словарь ресурса:
ResourceDictionary rd = new ResourceDictionary
{
Source = new Uri("Dictionary1.xaml", UriKind.Relative)
};
И объединить это:
Application.Current.Resources.MergedDictionaries.Add(rd);
Если вы объединяете словарь ресурсов в разметке, его даже не нужно компилировать. Я никогда не пробовал этого в коде, но, наверное, вы могли бы обнаружить, что можете объединить "свободный" не скомпилированный словарь ресурсов. Если это не сработало напрямую, вы определенно могли бы xamlreader.Load или.Parse некомпилированный rd в один в памяти.
Это добавляет к сфере применения. Если вы этого хотите, то, возможно, вам следует просто объединить свои словари ресурсов в app.xaml.
Если вы хотите область действия, то у окон, пользовательских контролов и т. Д. Есть ресурсы. Вы можете объединить словарь ресурсов практически на любом уровне, который вам интересен, и тогда он будет иметь более узкую область применения, чем приложение.