У меня есть абстрактная универсальная модель представления, которую я использую в качестве базового класса для нескольких других моделей представления. Он определяется следующим образом:
public abstract class DiscreteViewModel<T>
{
protected DiscreteItem<T> _selectedItem;
...
}
Мой DiscreteItem
класс также является общим и выглядит следующим образом:
public class DiscreteItem<T>
{
public T Display { get; set; }
public double Value { get; set; }
}
Моя идея состояла в том, чтобы изменить значения через базовый интерфейс Value
(поскольку все значения моих элементов являются двойными), но затем отобразить различные типы вещей (цвета, строки, изображения), используя свойство Display
.
Проблема возникает, когда я пытаюсь создать редактирование Window
для редактирования этих моделей представления. Моя цель состояла в том, чтобы иметь один Window
, определенный в XAML, и использовать шаблоны данных и, возможно, DataTemplateSelector
, чтобы обеспечить различные типы редактирования для типов DiscreteItem
. Например, если я вижу цвет, я хочу подключить поле со списком палитры цветов для его редактирования. И если я вижу строку, я хочу подключить простое текстовое поле и т. Д. Я быстро обнаружил, что поддержка обобщений в XAML по существу отсутствует. Я даже не могу создать экземпляр редактирования Window
в XAML.
Очевидно, я не хочу писать редактор Window
класс для каждого возможного типа DiscreteItem
. Это приведет к большому количеству дублированного кода и дальнейшему дублированию, когда кто-то другой придет и захочет отредактировать какой-то новый тип. Мне нужен один редактор, который можно использовать для всех типов DiscreteViewModel
. У кого-нибудь есть изящное представление о том, как это сделать? Являются ли дженерики даже правильным способом?