Silverlight数据网格使用SelectionChanged绑定刷新数据

时间:2009-08-26 00:06:56

标签: silverlight events datagrid

我正在构建一个使用Silverlight的问题跟踪系统。我使用DataGrids显示问题列表,将选定的索引设置为-1,这样就不会选择任何行,然后使用选择更改事件弹出特定选定问题的问题详细信息窗口。

当我尝试通过将DataGrid重新绑定到其ItemsSource来刷新DataGrid时,我禁用SelectionChanged事件,将DataGrid重新绑定到其ItemsSource,将SelectedIndex设置为-1,然后再次启用SelectionChanged事件。但是,无论我多久迟一次重新启用SelectionChanged事件(甚至直到DataGrid_Loaded事件之后),都​​会触发SelectionChanged事件并弹出问题详细信息窗口。

是否有更好的方法来刷新DataGrid中不会导致SelectedIndex更改的数据?如果没有,有没有办法告诉哪些事件是由程序性索引变化引起的,而不是人为交互?

(还有待讨论,这是作业的最佳控制吗?我需要每行显示多个字段,例如问题标题,分配用户,用户请求,状态等)。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我在过去使用comctl32 ListView控件的选择事件时遇到了类似的问题:程序化选择导致选择更改事件被引发。

我对此问题的解决方法是使用per-grid / list计数器变量,让事件处理程序知道它是否应该关心选择事件。代码将类似于:

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