Как правильно получить ресурсы из словаря ресурсов в приложении WPF? - PullRequest
1 голос
/ 31 октября 2011

каждый, в приложении WPF у меня есть словарь ресурсов, где определено множество DataTemplates для элементов управления и стилей.Например,

    <DataTemplate x:Key="PriceColumnCellTemplate">
    <Grid VerticalAlignment="Center">
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <TextBlock
            Text="{Binding Path=PriceQuotation, Mode=OneWay}"
            Grid.Column="1"
            VerticalAlignment="Center"
            Margin="2,0"
        />
    </Grid>
</DataTemplate>

в коде класса для просмотра. Я должен получить этот шаблон данных.Теперь это реализуется следующим образом

    private DataTemplate _priceColumnCellTemplate;
    private DataTemplate PriceColumnCellTemplate
    {
        get
        {
            if (_priceColumnCellTemplate == null)
                _priceColumnCellTemplate = (DataTemplate)_applicationResources["PriceColumnCellTemplate"];

            return _priceColumnCellTemplate;
        }
    }

    private DataTemplate _priceColumnCellEditingTemplate;
    private DataTemplate PriceColumnCellEditingTemplate
    {
        get
        {
            if (_priceColumnCellEditingTemplate == null)
                _priceColumnCellEditingTemplate = (DataTemplate)_applicationResources["PriceColumnCellEditingTemplate"];

            return _priceColumnCellEditingTemplate;
        }
    }

    private DataTemplate _alternativePriceColumnCellTemplate;
    private DataTemplate AlternativePriceColumnCellTemplate
    {
        get
        {
            if (_alternativePriceColumnCellTemplate == null)
                _alternativePriceColumnCellTemplate = (DataTemplate)_applicationResources["AlternativePriceColumnCellTemplate"];

            return _alternativePriceColumnCellTemplate;
        }
    }

, для каждого DataTemplate создается личное поле и свойство для получения значения этого поля.Таким же образом реализуется для стилей.

Проблема в этом коде заключается в том, что когда мне нужно добавить новый DataTemplate, я должен добавить код, как описано выше, для получения ресурсов формы DataTemplate.

КакВыполните рефакторинг этого кода, чтобы избежать дублирования кода и сохранить ту же функциональность. Может существовать более гибкий способ получения ресурсов из файла xaml.

Пожалуйста, помогите мне с предложением или приведите пример, как решить эту проблему.проблема.Заранее спасибо!

1 Ответ

1 голос
/ 31 октября 2011

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

это решает вашу проблему лучше?

...