【问题标题】:SortDescription bound to an explicit interface implementationSortDescription 绑定到显式接口实现
【发布时间】:2010-11-03 18:25:37
【问题描述】:

我有一个界面

public interface IProperty
{
    string Name { get; }
}

以及它的显式实现

public class Parameter : IProperty
{
    private readonly string m_name;

    public Parameter(string name) { m_name = name; }

    string IProperty.Name { get { return m_name; } }
}

我有一个显示 ObservableCollectionDataGrid。唯一的列,即 DataGridTextColumn 正在通过属性 SortMemberPath="(this:IProperty.Name)" 对行进行排序(我得到了绑定到显式成员的想法来自this forum thread 的实现。

所以问题是:如何进行默认行排序?我尝试在窗口构造函数中这样做:

var sortDescription = new SortDescription("(this:IProperty.Name)", ListSortDirection.Ascending);
m_dataGrid.Items.SortDescriptions.Add(sortDescription);

几乎没有运气。效果是:

  • 行以某种未指定的顺序排序
  • 我在 Visual Studio 输出窗口中遇到很多错误:
    System.Windows.Data 错误:39:BindingExpression 路径错误:在“对象”“参数”(HashCode = 25584554)上找不到“(this:IProperty.Name)”属性。空
  • 最有趣的是:当我在查看集合后应用任何过滤 (CollectionView.Filter) 时 - 行会神奇地开始正确排序!

有人知道为什么从一开始就没有正确排序行吗?
如果重要的话,我的目标是 .NET Framework v3.5

【问题讨论】:

  • 我不明白。您有一个网格,每行显示一个IProperty,并且每个IProperty 都有一个Name 属性,您希望根据该属性对该列进行排序?这没有任何意义,所以我假设我误解了你。发布所有代码会有所帮助。
  • 我将代码简化到了仍然会导致这种奇怪行为的最低限度。您的想法是正确的,每行一个 IProperty,表中只有一列。
  • 是否曾找到解决此问题的方法?我现在遇到了同样的问题,因为使用 PostSharp 动态地将接口​​引入我的模型对象,这些对象形成了 DataGrid ItemsSource 集合。将 GroupDescriptions 添加到显式接口属性也有同样的问题,至于你 - 一旦窗口启动,我也可以对所有内容进行排序和正确分组。啊!
  • @RJ Lohan:我几乎不记得这个问题,但我想我没有找到任何解决方案:(否则我会在这里发布。对不起。

标签: c# wpf wpftoolkit


【解决方案1】:

您应该使用ListCollectionView 作为DataGrid 的CollectionView。然后通过ListCollectionView.CustomSort配置排序逻辑。查看示例here

【讨论】:

    猜你喜欢
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 2022-09-10
    相关资源
    最近更新 更多