我有一个抽象的通用视图模型,我用它作为其他几个视图模型的基类。它的定义如下:
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
界面修改值(因为我的项目的所有值都是双倍的),然后使用{{1显示不同类型的事物(颜色,字符串,图像)属性。
当我尝试创建编辑Display
来编辑这些视图模型时,会出现问题。我的目标是在XAML中定义一个Window
,并使用数据模板和Window
来为DataTemplateSelector
的类型提供不同类型的编辑。例如,如果我看到一种颜色,我想插入一个颜色选择器组合框来编辑它。如果我看到一个字符串,我想插入一个简单的文本框等。我很快发现XAML中对泛型的支持基本上是不存在的。我甚至无法在XAML中实例化通用编辑DiscreteItem
。
显然,我不想为每种可能类型的Window
编写一个编辑器Window
类。这将导致大量重复的代码,并在其他人出现并想要编辑某些新类型时进一步重复。我想要一个可用于所有DiscreteItem
类型的编辑器。有没有人对如何做到这一点有一个优雅的想法?仿制药甚至是正确的方法吗?
答案 0 :(得分:0)
DataTemplate
是此问题的首选解决方案。您可以将模板放在ResourceDictionary
中,并在整个应用程序中使用它们。
每条评论更新
您通常不会使用Generics,而是将DataTemplate
和DataContext
组合在一起,其中包含要修改的项目。
<!-- Gross simplification -->
<Window x:Name="EditorWindow">
<ContentControl Content="{Binding}"/>
</Window>
答案 1 :(得分:0)
我不会尝试在这里使用泛型,我会使Display成为类型对象。然后,您可以拥有一个通用窗口,将其内容设置为离散项目,让datatemplates完成剩下的工作。