通用视图 - 模型编辑支持

时间:2010-01-20 17:09:25

标签: c# wpf generics mvvm

我有一个抽象的通用视图模型,我用它作为其他几个视图模型的基类。它的定义如下:

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类型的编辑器。有没有人对如何做到这一点有一个优雅的想法?仿制药甚至是正确的方法吗?

2 个答案:

答案 0 :(得分:0)

DataTemplate是此问题的首选解决方案。您可以将模板放在ResourceDictionary中,并在整个应用程序中使用它们。

每条评论更新

您通常不会使用Generics,而是将DataTemplateDataContext组合在一起,其中包含要修改的项目。

<!-- Gross simplification -->
<Window x:Name="EditorWindow">
    <ContentControl Content="{Binding}"/>
</Window>

答案 1 :(得分:0)

我不会尝试在这里使用泛型,我会使Display成为类型对象。然后,您可以拥有一个通用窗口,将其内容设置为离散项目,让datatemplates完成剩下的工作。