2015-11-12 2 views
0

Это может быть и невозможно, и я могу попытаться сделать что-то, что я не должен делать в первую очередь, но вот оно.Инициализировать коллекцию с помощью типа из другой коллекции

  • У меня есть обычай WPF управления, который имеет две IEnumerable коллекции
  • Первая коллекция (ItemsSource) объявляется с помощью XAML и может быть любого типа объектов.
  • Вторая коллекция, которую я реализую, снова является IEnumerable, которую я хочу инициализировать как ObservableCollection.
  • Вот моя проблема, поскольку я ограничен, что обе коллекции имеют один и тот же тип объектов (нет, я не могу использовать объект как тип). Например, ItemsSource имеет объекты типа «MyItem», и я хочу инициализировать вторую коллекцию ObservableCollection().

Возможно ли это? Я делаю то, что я не должен делать? Любые подсказки будут оценены. На стороне примечания, если я передаю второй сборник через XAML, все хорошо, но я не хочу добавлять такое ограничение в функцию, которую я реализую.

Edit:

Вот некоторые фрагменты кода для демонстрации сценария: Первая коллекция, обратите внимание, что эта коллекция наследуется от System.Windows.Controls.ItemsControl класса:

public IEnumerable ItemsSource { get; set; } 

Вторая коллекция:

public IEnumerable SelectedItems 
{ 
    get 
    { 
     this.InitializeSelectedItemsCollectionIfRequired(); 
     return (IEnumerable)GetValue(SelectedItemsProperty); 
    } 
    set 
    { 
     SetValue(SelectedItemsProperty, value); 
    } 
} 

private void InitializeSelectedItemsCollectionIfRequired() 
{ 
    if (this.GetValue(SelectedItemsProperty) == null) 
    { 
     // Here is where I want to initialize the second collection if it was not already set in via a Binding in the XAML 
     this.SelectedItems = new System.Collections.ObjectModel.ObservableCollection<"dont know how to pass correct type here">(); 
    } 
} 
+1

Возможно, некоторые небольшие фрагменты кода, касающиеся двух коллекций, могут быть полезны? – Oliver

+0

Извините, что добавил несколько строк того, что я сейчас отлаживаю в своем посте, –

ответ

1

Поскольку вы не знаете точный тип, вы можете просто вернуться к самому основному типу object

this.SelectedItems = new System.Collections.ObjectModel.ObservableCollection<object>(); 
+0

Да, я понял, что это на 100% правильно, но у меня есть ограничение, что этого объекта недостаточно, и мне нужен «реальный» тип объектов. Это ограничение устаревшим кодом, который в принципе не может синхронизировать две коллекции, если они не содержат объекты одного и того же типа. –

+0

Разделяют ли они какой-либо базовый тип или интерфейс, который соответствует вашим потребностям? Я немного не понимаю, как работает управление, если оно основано на типе. Уверен, что-то, где-то известно о типе? – Oliver

+0

Hi Oliver, Как я пишу это сообщение, я понимаю, что, поскольку я боялся, что я хочу сделать, технически невозможно в C#. Объявление набора типа, которое будет определено во время выполнения, невозможно в C# или, по крайней мере, не является хорошей практикой. Я думаю, что мне нужно сделать реорганизацию устаревшего кода, который ставит такие «большие» ограничения таким образом, чтобы он позволял мне просто использовать базовый класс для объектов, а не их конкретный тип, который определяется во время выполнения , Благодарим вас за ваш комментарий, и я помету это как ответ. –

Смежные вопросы