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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как преобразовать myClass<myType> в myClass<objec> 
:(
    Опции темы
Tereha
Дата 17.2.2013, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 3.2.2010

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



Уважаемые Гуру!
 В TabControl ItemsSource связывается с ObservableCollection содержащей набор generic ViewModel. С помощью generic я настраиваю ViewModel на заданный тип объекта edm. В настоящий момент мне кажется, что должно быть нечто вроде
Код

ObservableCollection<WorkspaceViewModel<object>> _workspaces;



и новый элемент включается в коллекцию как-то вроде
Код

 workspace = new myViewModel() as WorkspaceViewModel<object>;
 Workspaces.Add(workspace);
 SetActiveWorkspace(workspace);

где
Код

class myViewModel() : WorkspaceViewModel<myType>

Но на преобразовании
Код

new myViewModel() as WorkspaceViewModel<object>

получаю сообщение, что такое преобразование невозможно. 
 Возможно кто-то сможет подсказать, как обойти эту проблему?
PM MAIL   Вверх
dzaraev
Дата 5.9.2013, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 12.1.2013

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



Чтобы осуществить преобразование, подобное этому
Код

workspace = new myViewModel() as WorkspaceViewModel<object>;

Вам необходима вариация generic-параметра.
Про вариацию в C# можно прочитать на MSDN: http://msdn.microsoft.com/ru-ru/library/dd...(v=vs.100).aspx
В вашем случае не получится сделать именно так, как вы хотите, т.к. вариация применяется только к интерфейсам и делегатам.
Это значит вместо класса WorkspaceViewModel<T>; вам необходимо будет объявить интерфейс IWorkspaceViewModel<out T>
Это будет означать, что можно выполнить преобразование 
Код

IWorkspaceViewModel<MyType> -> IWorkspaceViewModel<Object>

При условии, что MyType - ссылочный тип.
Таким образом, вам даже не придется выполнять преобразование явно через оператор as, вы можете просто добавить экземпляр 
MyViewModel в коллекцию типов IWorkspaceViewModel<object>.
Вот так приблизительно нужно переписать ваш пример, чтобы он заработал:
Код

    class Program
    {
        static ObservableCollection<IWorkspaceViewModel<object>> _workspaces;

        static void Main()
        {
            _workspaces = new ObservableCollection<IWorkspaceViewModel<object>>();

            var workspace = new MyViewModel();
            _workspaces.Add(workspace);
        }
    }

    interface IWorkspaceViewModel<out T>
    {
        
    }

    class MyViewModel : IWorkspaceViewModel<MyType>
    {
        
    }

    class MyType
    {
         
    }

Подробности узнаете, если пройдёте по ссылке, которую я привел выше.

Это сообщение отредактировал(а) dzaraev - 5.9.2013, 07:53
--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




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


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

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