我有一个抽象的通用视图模型,我将其用作其他几个视图模型的基类。它的定义如下:
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来编辑这些视图模型时,问题就出现了。我的目标是在XAML中定义单个Window,并使用数据模板和DataTemplateSelector为不同类型的DiscreteItem提供不同类型的编辑。例如,如果我看到一种颜色,我想插入一个颜色选择器组合框来编辑它。如果我看到一个字符串,我想插入一个简单的文本框,等等。我很快发现XAML中对泛型的支持基本上是不存在的。我甚至不能在XAML中实例化一个泛型编辑Window。
显然,我不想为每种可能的DiscreteItem类型编写编辑器Window类。这将导致大量重复的代码,并且当其他人出现并想要编辑一些新类型时,会进一步重复。我想要一个单一的编辑器,可以用于所有的DiscreteViewModel类型。有谁知道如何做到这一点的优雅想法吗?泛型是解决这一问题的正确方法吗?
发布于 2010-01-21 04:13:36
我不会在这里尝试使用泛型,我会将Display设置为object类型。然后,您可以拥有一个通用窗口,该窗口将其内容设置为discreteitem,并让datatemplates完成其余的工作。
发布于 2010-01-21 01:16:40
DataTemplate是解决这个问题的首选方案,你可以把模板放在ResourceDictionary中,然后在整个应用程序中使用它们。
每条评论的更新
您通常不会为此使用泛型,而是将DataTemplate和包含要编辑的项的DataContext组合在一起。
<!-- Gross simplification -->
<Window x:Name="EditorWindow">
<ContentControl Content="{Binding}"/>
</Window>https://stackoverflow.com/questions/2103319
复制相似问题