我有一个屏幕,上面有一个 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 是 View 模型的一个属性。 它工作正常并正确填充详细信息控件。
当我导航离开然后返回到此屏幕时,我的问题就来了。
屏幕是从头开始重新创建的,但我的 View 模型是从 View 模型定位器中检索的(使用 MVVM Light 和 SimpleIOC)。 Viewmodel 完全符合我的要求。父网格正确填充,子详细信息正确填充。 ViewModel 上的 CurrentlySelectedItem 已填充,但网格未突出显示所选行。
我尝试过使用和不使用 Updatesourcetrigger 和 IsSynchronisedWithCurrentItem,但这些会导致它选择网格中的第一行并突出显示它 - 从而覆盖我在 CurrentlySelectedItem 中的先前值,这不是我想要的。
有人对如何实现这一目标有任何想法吗?
最佳答案
无法在加载或导航到的页面上获取对 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 部分,以确保它在屏幕上可见。
关于c# - 绑定(bind)到已设置选定项目的 View 模型时,无法让 telerik radgridview 突出显示 SelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12261461/