用程序更改数据网格列标题中排序图标的显示

本文关键字:标题 排序 图标 显示 网格 程序 数据 数据网 | 更新日期: 2023-09-27 18:25:58

我以前问过这个问题,没有得到答案,但现在我有了更多的细节。

基本上,我想在wpf数据网格列中用程序显示列排序图标。

我有以下代码来做到这一点:

private void dtgMain_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            dtgMain.Columns[0].SortDirection = ListSortDirection.Ascending;
        }

这似乎设置了列的排序顺序,但当绘制网格时,图标不会显示。

当我在方法中添加一个消息框时,它工作得很好。我的问题有两个。为什么消息框会导致该方法工作?在不使用消息框的情况下,我如何让它发挥作用?

这是处理其中消息框的方法:

private void dtgMain_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    MessageBox.Show("Here");
    dtgMain.Columns[0].SortDirection = ListSortDirection.Ascending;
}

编辑以下是设置数据网格的数据上下文的方法

public void processLoad(string response)
        {
            XmlDataProvider provider = new XmlDataProvider();
            if (provider != null)
            {
                System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
                doc.LoadXml(response);
                provider.Document = doc;
                provider.XPath = "/moo/response/data/load/panel";
                dtgMain.DataContext = provider;
            }
        }

如果您需要更多信息,请告诉我。

用程序更改数据网格列标题中排序图标的显示

好吧,我怀疑发生的事情是,DataContext更新引起的数据布局更改在您调用设置方向箭头后完成,因此在您设置方向箭头之后它会被擦除。有趣的是,在我的情况下,即使我放入消息框,它也无法工作,可能是因为它在显示时挂断了UI线程。

你能试着用调度员队列上的类似调用替换设置排序方向的线路吗:

    dtgMain.Dispatcher.BeginInvoke(new Action(() =>
    {
        dtgMain.Columns[0].SortDirection = ListSortDirection.Ascending;
    }), DispatcherPriority.ApplicationIdle);

看看这是否有效?