Программно изменить отображение значка сортировки в заголовке столбца таблицы данных - PullRequest
0 голосов
/ 28 февраля 2012

Я задавал этот вопрос ранее и не получил ответа, но теперь у меня есть более подробная информация.

По сути, я хочу программно отобразить значок сортировки столбца в столбце таблицы данных 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;
}

edit Вот метод, который устанавливаетdatacontext of datagrid

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 Ответ

3 голосов
/ 28 февраля 2012

ОК, я подозреваю, что происходит то, что изменения макета данных, вызванные обновлением DataContext, завершаются после вашего вызова, чтобы установить стрелку направления, и, следовательно, стираются после его установки.Интересно, что в моем случае это не сработало, даже когда я вставил окно сообщения, возможно, из-за того, что оно зависало в потоке пользовательского интерфейса во время его отображения.

Не могли бы вы попытаться заменить строку, которая задает направление сортировки, аналогичным образом?вызов поставить в очередь диспетчера:

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

и посмотреть, работает ли это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...