WPF数据网格选择问题

时间:2012-10-24 12:55:40

标签: wpf list datagrid selection

在我的WPF应用程序中,我有一个数据网格和一个文本框。在文本框的textChanged事件中,我把它放在:

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(在虚拟机中相同),但仍然无效。

谢谢,对不起我的英语。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用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}"
希望有所帮助!