Как использовать DataTemplates в Призме

Я использовал Призму некоторое время теперь и наслаждаюсь, насколько легче она должна отделить мои модули.

Это особенно работает отлично для представлений и моделей представления, так как можно ввести модели представления через интерфейсы и представления через менеджера региона.

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

Много времен, хотя, я создам ViewModel и соответствие DataTemplate. Они могут затем использоваться другими блоками для создания представления.

Моя проблема, который я не вижу способа отослать к этим datatemplates, не ссылаясь на содержание блока, таким образом, в моем xaml файле я пишу что-то как:

<ResourceDictionary Source="pack://application:,,/......>

Конечно, это действительно не отделяется, хотя я пытаюсь удостовериться, который я не отсылаю к блоку больше нигде в моем коде.

Другое решение, о котором я думал, должен был поместить datatemplates в Инфраструктурный проект, но мне не нравится так слишком много также, поскольку я хочу все, что принадлежит модулю, который будет содержаться в нем (кроме интерфейсов, конечно).

Так, у кого-либо есть хорошее обходное решение, или я пропускал некоторую функцию Prism?

5
задан Thorsten Lorenz 11 February 2010 в 13:45
поделиться

2 ответа

Я бы предложил создать сервис, который инкапсулирует добавление словарей ресурсов в Application. Resources.MergedDictionaries.

// Service interface (defined in the 'infrastructure' project)
public interface IResourceAggregator
{
    void AddResource(Uri resourceUri);
}

// Service implementation (implemented at the application/shell level)
class ResourceAggregator : IResourceAggregator
{
    public void AddResource(Uri resourceUri)
    {
        var resourceDictionary = new ResourceDictionary() { Source = resourceUri };
        var app = Application.Current;
        app.Resources.MergedDictionaries.Add(resourceDictionary);
    }
}

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

4
ответ дан 15 December 2019 в 01:00
поделиться

Вам нужно будет объединить ресурсы при запуске модуля. Подробнее об этом можно прочитать здесь: http://blogs.southworks.net/jdominguez/2008/09/presentation-model-with-datatemplates-in-compositewpf-prism-sample/

Конечно, вы можете далее абстрагировать эту функциональность до многоразового сервиса.

0
ответ дан 15 December 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: