首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通用视图-模型编辑支持

通用视图-模型编辑支持
EN

Stack Overflow用户
提问于 2010-01-21 01:09:25
回答 2查看 479关注 0票数 2

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

代码语言:javascript
复制
public abstract class DiscreteViewModel<T>
{
    protected DiscreteItem<T> _selectedItem;
    ...
}

我的DiscreteItem类也是泛型的,如下所示:

代码语言:javascript
复制
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类型。有谁知道如何做到这一点的优雅想法吗?泛型是解决这一问题的正确方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-21 04:13:36

我不会在这里尝试使用泛型,我会将Display设置为object类型。然后,您可以拥有一个通用窗口,该窗口将其内容设置为discreteitem,并让datatemplates完成其余的工作。

票数 0
EN

Stack Overflow用户

发布于 2010-01-21 01:16:40

DataTemplate是解决这个问题的首选方案,你可以把模板放在ResourceDictionary中,然后在整个应用程序中使用它们。

每条评论的更新

您通常不会为此使用泛型,而是将DataTemplate和包含要编辑的项的DataContext组合在一起。

代码语言:javascript
复制
<!-- Gross simplification -->
<Window x:Name="EditorWindow">
    <ContentControl Content="{Binding}"/>
</Window>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2103319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档