1

GetRowForItem 方法在调用 grid.SortDescriptors.Reset() 后返回 null。以下代码是一个按钮单击事件的示例,它获取所选项目的行:

    private void GetRowForSelectedItem_Click(object sender, RoutedEventArgs e)
    {
        this.clubsGrid.SortDescriptors.Reset();
        var r = this.clubsGrid.GetRowForItem(this.clubsGrid.SelectedItem);
        MessageBox.Show(r.ToString());
    }

r 的值为空。

4

1 回答 1

2

发生这种情况的原因是 Grid.SortDescriptors.Reset() 方法正在 UI 线程上执行,并且在调用 GetRowForItem 方法时尚未完成。这是一个似乎对我很有效的解决方法。我正在调用 SortDescriptors.Reset() 方法,然后调用 BeginInvoke(使用 DispatcherPriority of Input)来调用 GetRowForItem 方法。

 private void GetRowForSelectedItem_Click(object sender, RoutedEventArgs e)
    {
        this.clubsGrid.SortDescriptors.Reset();

        System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Input, new Action(() =>
        {
            var r = this.clubsGrid.GetRowForItem(this.clubsGrid.SelectedItem);
            MessageBox.Show(r.ToString());
        }));
    }
于 2013-10-08T01:02:13.650 回答