Сетка данных Silverlight Обновить данные с помощью привязки SelectionChanged - PullRequest
1 голос
/ 26 августа 2009

Я создаю систему отслеживания ошибок, которая использует Silverlight. Я использую DataGrids для отображения списков проблем, устанавливаю выбранный индекс равным -1, чтобы не отображать выбранную строку, а затем использую событие изменения выбора, чтобы открыть окно сведений о проблеме для конкретной выбранной проблемы.

Когда я пытаюсь обновить DataGrid, привязав его к ItemsSource, я отключаю событие SelectionChanged, перепривязываю DataGrid к его ItemsSource, устанавливаю SelectedIndex в -1 и затем снова включаю событие SelectionChanged. Однако независимо от того, насколько поздно я оставляю повторное включение события SelectionChanged (даже до тех пор, пока не будет завершено событие DataGrid_Loaded), событие SelectionChanged будет запущено, и всплывет окно сведений о проблеме.

Есть ли лучший способ обновить данные в DataGrid, который не приведет к изменению SelectedIndex? Если нет, есть ли способ сообщить, какие события вызваны программным изменением индекса, а не взаимодействием человека?

(Также для обсуждения, это лучший контроль для работы? Мне нужно отобразить несколько полей в строке, таких как заголовок проблемы, назначенный пользователь, запрошенный пользователем, статус и т. Д.)

Заранее спасибо.

1 Ответ

2 голосов
/ 26 августа 2009

В прошлом у меня была похожая проблема с событиями выбора элемента управления comctl32 ListView: программный выбор вызывает события изменения выбора.

Мой обходной путь для этой проблемы - иметь переменную счетчика для каждой сетки / списка, которая позволяет обработчику событий знать, должно ли оно заботиться о событии выбора или нет. Код будет выглядеть примерно так:

int issueList_ProgrammaticEventCount_Selection = 0;

void refreshIssueList()
{
    ++issueList_ProgrammaticEventCount_Selection;
    issueList.ItemsSource = ...;
}

void issueList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (issueList_ProgrammaticEventCount_Selection > 0)
    {
        --issueList_ProgrammaticEventCount_Selection;
        return;
    }

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