在我的wpf应用程序中,我有一个datagrid和一个文本框。在文本框的文本变化事件中,我说:
myDatagrid.ItemsSource =
myListOfObjects.Where(item => item.Name.Contains(MyTextBox.Text)); //Filter
if (myDatagrid.Items.Count > 0) // If no itens, then do nothing
{
myDatagrid.SelectedIndex = 0; // If has at least one item, select the first
}
myDatagrid.Items.Refresh();
请注意,在datagrid的第一行中,我强制选择文本时。
。但不幸的是,行的颜色不会更改为蓝色,因此很难看到选择。
我真的需要这个,因为在文本框的PreviewKeydown事件中,我有一个:
private void myTextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Up)
{
if (!(myDataGrid.SelectedIndex <= 0))
{
myDataGrid.SelectedIndex--; // Go one position Up
}
}
if (e.Key == Key.Down)
{
if (!(myDataGrid.SelectedIndex == myDataGrid.Items.Count - 1))
{
myDataGrid.SelectedIndex++; // Go one position Down
}
}
}
因此,当焦点文本框并按下向上或向下键时,选择似乎不会更改。
我如何在数据杂志上将所选项目更改为蓝色?
另一件事:在我的虚拟机中,它起作用了!!使用相同的代码!怎么可能?
我认为这是Aeroglass,但是我将主题更改为Windows 7 Basic(在虚拟机中相同),但仍然不起作用。
谢谢,对不起我的英语。
您可以尝试使用SelectedItem吗?您始终可以创建一个新属性并绑定到此属性,然后直接设置此项目,而不是使用所选索引。希望这将触发DataGrid控件中的任何其他逻辑:)
//Declare property outside of method
public ObjectType SelectedItem { get; set; }
//Set datacontext on load
DataContext = this;
myDatagrid.ItemsSource = myListOfObjects.Where(item => item.Name.Contains(MyTextBox.Text)); //Filter
if (myDatagrid.Items.Count > 0) // If no itens, then do nothing
{
SelectedItem = myDatagrid.ItemSource[0]; // If has at least one item, select the first
}
myDatagrid.Items.Refresh();
也不要忘记设置绑定!
SelectedItem="{Binding SelectedItem}"
希望有帮助!