【问题标题】:Sorting on Templated Column with converters使用转换器对模板列进行排序
【发布时间】:2013-02-04 01:56:36
【问题描述】:

我的数据模型是这样的:

    public class ModelA
    {
    public int ModelId{get;set;}
    }
    public class ModelB
    {
      public IEnumerable<ModelA> ChildObjects{get;set;}
    }

现在在 Xaml 中,我使用 DataGrid 和 ItemSource 作为 List(),并有一个模板列绑定到 ChildObjects,转换器完成从 ChildObjects 获取第一个元素并将值作为该对象的 ModelId 返回的工作.现在一切正常,直到现在。问题是当我对这个模板列进行排序时。

我知道一种解决方法是在 ModelB 中有一个额外的属性,它可以完成转换器正在做的工作,并将 xaml 中的 sortmemberpath 作为新的属性名称,但这不是我想要的,因为它与模型相对。

有没有其他完美的方法来处理这种情况,因为 SortMemberPath 不能像它只是一个常量那样表达。

【问题讨论】:

    标签: wpf xaml sorting mvvm datagrid


    【解决方案1】:

    您已标记此 MVVM,我认为这意味着您的模型实际上是视图模型(或至少被视图模型包裹)。既然如此,为什么不会你添加额外的属性?毕竟,它的存在是为了支持这种观点。你的视图需要额外的属性,所以你的视图模型应该提供它。

    【讨论】:

    • 我的 View 模型类似于 SampleViewModel 的属性 - BoundItems 是 List,在模板列中绑定到该属性,每一行对应一个 ModelB 对象,模板列中的转换器是从 modelB 的 ChildObjectList 属性中取出 ModelA 的第一个对象,并将 ModelA 对象的 ModelId 绑定到该列。现在,如果我想做逻辑,我需要在模型上做,而不是 ViewModel....
    • 正确 - 您正在绑定到模型对象,而不是先将它们包装在视图模型中。这是您问题的症结所在,也是您需要解决的问题。
    猜你喜欢
    • 2012-04-19
    • 2012-11-05
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2016-02-03
    • 2012-08-27
    相关资源
    最近更新 更多