C# 绑定到显式接口实现的SortDescription

C# 绑定到显式接口实现的SortDescription,c#,wpf,wpftoolkit,C#,Wpf,Wpftoolkit,我有一个接口 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;

我有一个接口

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; } }
}
我有一个数据网格,它显示了一个可观察的收集。唯一的一列,即DataGridTextColumn是根据属性SortMemberPath=“(this:IProperty.Name)”对行进行排序(我从中获得了绑定到显式成员实现的想法)

所以问题是:如何进行默认行排序?我尝试在窗口构造函数中执行此操作:

var sortDescription = new SortDescription("(this:IProperty.Name)", ListSortDirection.Ascending);
m_dataGrid.Items.SortDescriptions.Add(sortDescription);
几乎没有运气。其效果是:

  • 这些行按未指定的顺序排序
  • 我在Visual Studio输出窗口中遇到许多错误:
    System.Windows.Data错误:39:BindingExpression路径错误:‘(this:IProperty.Name)’在'object''参数(HashCode=25584554)'上找不到属性。空的
  • 最有趣的是:当我在查看集合后应用任何筛选(CollectionView.Filter)时,行神奇地开始正确排序
有人知道为什么行从一开始就没有正确排序吗?

如果重要的话,我的目标是.NET Framework v3.5

您应该使用
ListCollectionView
作为数据网格的
CollectionView
。然后通过配置排序逻辑。请看一个例子。

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