4

私の WPF アプリケーションには、1 つのデータグリッドと 1 つのテキスト ボックスがあります。テキストボックスの 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
            }
        }
    }

そのため、テキスト ボックスがフォーカスされているときにユーザーが上キーまたは下キーを押しても、選択内容は変更されないように見えます。

データグリッドで選択したアイテムの色を青に変更する方法について何か考えはありますか?

その他:私の仮想マシンでは、動作します!! 同じコードで!それはどのように可能ですか?

それはエアログラスだと思いますが、テーマを Windows 7 Basic (仮想マシンでも同じ) に変更しても、まだ機能しません。

ありがとう、そして私の英語でごめんなさい。

4

1 に答える 1

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}"

お役に立てば幸いです。

于 2012-10-24T13:25:52.037 に答える