【发布时间】:2019-03-17 21:28:10
【问题描述】:
我正在使用模型来选择 DataGrid 中的项目,如下所示:
public ObservableCollection<MyModel> Models{
get {return m_Models; }
}
public MyModel SelectedModel
{
get{ return m_SelectedModel; }
set{
m_SelectedModel = value;
}
NotifyPropertyChanged("SelectedModel");
NotifyPropertyChanged("Models");
}
这两个公共属性位于作为窗口数据上下文的模型中。 Observable Collection 绑定到数据网格,SelectedItem 绑定到 SelectedModel,就像在 XAML 中一样:
<DataGrid x:Name="MyDataGrid" AutoGenerateColumns="False" IsReadOnly="True" CanUserResizeColumns="True" CanUserAddRows="False" CanUserSortColumns="True"
SelectionMode="Single" SelectionChanged="DataGrid_SelectionChanged" ItemsSource="{Binding Models}"
CanUserResizeRows="False" IsTextSearchEnabled="True" RowHeaderWidth="0" SelectedItem="{Binding SelectedModel, Mode=TwoWay, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True}" Grid.ColumnSpan="2" Margin="0,0,-0.4,-0.4">
所以,每当我更改 SelectedModel 时,数据网格中的 SelectedItem 都会更新。这工作得很好,我已经能够根据 SelectedItem 填充其他数据。事实上,我的 DataGrid_SelectionChanged 事件处理程序会在设置 SelectedModel 时被调用。
但是,每当我选择一个新项目时,我希望数据网格自动滚动以显示 SelectedItem。我已经尝试了多种方法来让它工作,但无济于事。以下是我尝试过的一些事情(已确认使用调试器调用此函数):
private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if(MyDataGrid.SelectedItem != null)
{
//All 3 of these have been tried separately and do not work
MyDataGrid.ScrollIntoView(MyDataGrid.SelectedItem);
MyDataGrid.ScrollIntoView(MyDataGrid.Items[MyDataGrid.SelectedIndex]);
MyDataGrid.ScrollIntoView(_model.SelectedModel); //Didn't expect this one to work but just want to show that I'm trying things out here
}
}
我查看了 ScrollIntoView 的其他问题,但似乎没有一个可以解决我的问题。我将不胜感激将提供的任何帮助。谢谢。
【问题讨论】:
标签: c# .net wpf user-interface