3

我有一个屏幕,上面有一个 Telerik RadGridView 作为父/主控件。然后我有一个子用户控件显示所选项目的详细信息。

我的网格是这样设置的:

<telerik:RadGridView  
 AutoGenerateColumns="False"  
 CanUserFreezeColumns="False" IsReadOnly="True"
 RowIndicatorVisibility="Collapsed" 
 ItemsSource="{Binding LinkedCases}" 
 SelectionUnit="FullRow" SelectionMode="Single"
 IsBusy="{Binding LinkedCasesLoading}" 
 ShowColumnFooters="True" 
 SelectedItem="{Binding CurrentlySelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >

CurrentSelectedItem 是视图模型上的一个属性。它工作正常并正确填充详细信息控件。

当我离开然后返回此屏幕时,我的问题就出现了。

屏幕是从头开始重新创建的,但我的视图模型是从视图模型定位器中检索的(使用 MVVM Light 和 SimpleIOC)。Viewmodel 完全符合我的要求。父网格正确填充,子详细信息正确填充。ViewModel 上的 CurrentSelectedItem 已填充,但网格未突出显示所选行。

我已经尝试过使用和不使用 Updatesourcetrigger 和 IsSynchronisedWithCurrentItem,但这些会导致它选择网格中的第一行并突出显示 - 从而覆盖我在 CurrentSelectedItem 中的先前值,这不是我想要的。

有人对如何实现这一目标有任何想法吗?

4

1 回答 1

4

无法在加载或导航到的页面上获取对 Grid 的引用 - 我将其命名为 CaseGridView,虽然它识别出它是一个 RadGridView,但它返回 null。我只是假设此时它还没有创建控件,因为我已经命名了控件,并尝试使用它来引用控件事件中的控件,这也失败了。

如果我使用发件人,发现它适用于 DataLoaded 事件:

 private void CaseGridView_DataLoaded(object sender, EventArgs e)
    {
        var grid = sender as RadGridView;
        if (grid != null)
        {
            grid.SelectedItem = vm.CurrentlySelectedItem;
            if (grid.SelectedItem != null)
            {
                grid.ScrollIntoView(grid.SelectedItem);
            }
        }
    }

我还添加了 scrollIntoView 部分,以确保它在屏幕上可见。

于 2012-09-05T09:43:03.620 回答