以编程方式更改datagrid列标题中排序图标的显示

时间:2012-02-28 12:05:41

标签: c# wpf datagrid

之前我问过这个问题并没有得到答案,但现在我有更详细的信息。

基本上我想以编程方式在wpf datagrid列中显示列排序图标。

我有以下代码来执行此操作:

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;
}

编辑 以下是设置datagrid

的datacontext的方法
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;

            }

        }

如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:3)

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

您是否可以尝试使用调度程序队列上类似的调用来替换设置排序方向的行:

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

看看是否有效?