Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обобщённый класс в качестве источника данных 
V
    Опции темы
Compositum
Дата 12.11.2010, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Добрый день. Хочу создать шаблон, завязанный на определённый тип. Как это делать в том случае, если тип обобщённый?
У меня есть класс ObservableDictionary<T>, а так же класс ValueInfo. Хочу создать шаблон для ObservableDictionary<ValueInfo>. без указания конкретного ключа, а чтобы он автоматически применялся ко всем объектам типа ObservableDictionary<ValueInfo>.

Пытался сделать так:
Код

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:bush="clr-namespace:Bushman.Common;assembly=Common"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <!--Шаблон для ObservableDictionary<ValueInfo>-->
    <DataTemplate DataType="{x:Type bush:ObservableDictionary<bush:ValueInfo>}">
        <StackPanel>
            <Label Content="{Binding Source=DataContext, Path=Key}"/>
        </StackPanel>
    </DataTemplate>
</ResourceDictionary>

Ошибка компиляции:
Цитата

The type reference cannot find a public type named 'ObservableDictionary<bush:ValueInfo>'. 

Затем пробовал делать так (перед ValueInfo убрал "bush:"):
Код

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:bush="clr-namespace:Bushman.Common;assembly=Common"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <!--Шаблон для ObservableDictionary<ValueInfo>-->
    <DataTemplate DataType="{x:Type bush:ObservableDictionary<ValueInfo>}">
        <StackPanel>
            <Label Content="{Binding Source=DataContext, Path=Key}"/>
        </StackPanel>
    </DataTemplate>
</ResourceDictionary>

Ошибка компиляции:
Цитата

The type reference cannot find a public type named 'ObservableDictionary<ValueInfo>'.


Третий вариант был таким (хотя мне бы хотелось указать не "T", а конкретный тип, поскольку тогда можно было бы назначить разные шаблоны исходя из типа значений словаря, т.е. один шаблон для ObservableDictionary<ValueInfo>, другой для ObservableDictionary<FileInfo>, и т.д. и т.п.):
Код

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:bush="clr-namespace:Bushman.Common;assembly=Common"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <!--Шаблон для ObservableDictionary<ValueInfo>-->
    <DataTemplate DataType="{x:Type bush:ObservableDictionary<T>}">
        <StackPanel>
            <Label Content="{Binding Source=DataContext, Path=Key}"/>
        </StackPanel>
    </DataTemplate>
</ResourceDictionary>

Ошибка компиляции:
Цитата

The type reference cannot find a public type named 'ObservableDictionary<T>'.


Меня терзают смутные сомнения, что в XAML-разметке нельзя задать источником объекты обобщённых классов...
Если в окне xaml-редактора я ставлю символ ":" после "bush" - то в раскрывающемся списке отсутствует нужный мне обобщённый класс, хотя на самом деле он есть в указанном пространстве.


user posted image

Я не очень доверяю XAML-редактору MS VS 2010, т.к. неоднократно сталкивался с тем, что верный синтаксис он подчёркивал как ошибку, но при компиляции всё работало как часы. Возможно и с отображением обобщённых классов в раскрывающемся списке - такая же фигня...
PM   Вверх
Compositum
Дата 12.11.2010, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Здесь в разделе  XAML 2009 пишут, что запрашиваемый мною функционал не реализован (к сожалению).
Т.о. тема закрыта.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0399 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.