代码之家  ›  专栏  ›  技术社区  ›  Charlie

通用视图模型编辑支持

  •  2
  • Charlie  · 技术社区  · 15 年前

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

    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中定义,并使用数据模板 DataTemplateSelector 为以下类型提供不同类型的编辑: 离散项目 . 例如,如果我看到一个颜色,我想插入一个颜色选择器组合框来编辑它。如果我看到一个字符串,我想插入一个简单的文本框等,我很快发现在XAML中对泛型的支持基本上是不存在的。我甚至不能实例化一个通用的编辑 窗口 在XAML中。

    显然,我不想写编辑 窗口 每种可能类型的类 离散项 . 这将导致大量重复的代码,当其他人出现并想要编辑一些新类型时,会导致进一步的重复。我想要一个能为所有人服务的编辑 DiscreteViewModel 类型。有人对如何做到这一点有优雅的想法吗?关于这一点,仿制药甚至是正确的方法吗?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Steve Psaltis    15 年前

    我不会尝试在这里使用泛型,我会使显示的类型为Object。然后,您可以有一个通用窗口,将其内容设置为离散项,并让DataTemplates执行其余操作。

        2
  •  0
  •   user7116    15 年前

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

    按注释更新

    您通常不会为此使用泛型,而是将 数据模板 S和A DataContext 它将包含要编辑的项。

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