c# - 绑定(bind)到显式接口(interface)实现的 SortDescription

标签 c# wpf wpftoolkit

我有一个接口(interface)

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)" 对行进行排序(我得到了绑定(bind)到显式成员的想法来自 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

最佳答案

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

关于c# - 绑定(bind)到显式接口(interface)实现的 SortDescription,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4090309/

相关文章:

c# - 如何使用Selenium元素等待、检查、点击而不会再次找到元素?

wpf - 使用一个鼠标悬停触发器更改多个元素

C# 如何设置灵活的基础,以便稍后从程序集更改控件?

c# - 覆盖可变对象的 GetHashCode?

c# - 如何在没有 Visual Studio 的情况下使用 ASP.NET WebAPI 创建 RESTful Web 服务?

c# - WPF 用户控件中的数据绑定(bind)

c# - 使用数据绑定(bind)的 C#/WPF 中具有确定/取消行为的对话框

charts - 如果我更改 .NET 4 中 DataPoint 的 ControlTemplate,WPF 工具包图表不会显示

WPF 工具包中的 WPF DataGrid 与 ListView - 有什么好处?

c# - 不同版本解析文件不同