Как предоставить 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.
Если вы хотите область действия, то у окон, пользовательских контролов и т. Д. Есть ресурсы. Вы можете объединить словарь ресурсов практически на любом уровне, который вам интересен, и тогда он будет иметь более узкую область применения, чем приложение.

Другие вопросы по тегам