用程序更改数据网格列标题中排序图标的显示
本文关键字:标题 排序 图标 显示 网格 程序 数据 数据网 | 更新日期: 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);
看看这是否有效?