绑定到viewmodel并且已经设置了selecteditem时,无法使telerik radgridview突出显示SelectedItem

时间:2012-09-04 10:22:08

标签: c# silverlight mvvm telerik

我有一个屏幕,我有一个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}" >

CurrentlySelectedItem是viewmodel上的属性。 它正常工作并正确填充详细信息控件。

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

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

我尝试过使用和不使用Updatesourcetrigger和IsSynchronisedWithCurrentItem,但这些会导致它选择网格中的第一行并突出显示 - 并因此覆盖我在CurrentlySelectedItem中的先前值,这不是我所追求的。

任何人对如何实现这一点都有任何想法?

1 个答案:

答案 0 :(得分:3)

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

如果我使用sender:

,发现它可以处理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部分,以确保它在屏幕上可见。

相关问题