2009-06-10 8 views
2

私はこのかなり簡単なことで困惑しているとは思いません。私はもともとWPF DataGridのコードプレックスの議論にこれを掲載しましたが、何の反応もありませんでした。だから私はここで試しています:WPFへのリバインドDatagridのDatacontext

私はこれを行う方法を見つけることができないようです。私は、datacontextが最初にテーブルの行で満たされているDataGridを作成します。条件に基づいていくつかの行を返す検索機能を実装しました。それらの行だけを表示したいと思いますが、最初に作成したdatacontextを破棄して、新しくフィルタリングしたコレクションを追加するにはどうすればよいですか?

私は単純に、このようにそれをやって開始しました:

(後期編集:私はここでジェネリックコードを入力するように見えることはできません - 例えば(がMyTypeにdatagrid.Itemsをキャストするsuppoedされる次の行でキャストを))

IEnumerable rows = datagrid.Items.Cast();

IEnumerable filteredRows = rows.Where(row => row.someCondition == true);

どのようにして、私のデータグリッドにfilteredRowsだけを表示させることができますか?ちょうどやって:

datagrid.DataContext = null;

datagrid.DataContext = filteredRows;

(何らかの理由で愚かなにおいさえします)。

私は逆もしなければなりません。一部のボタンクリックでは、ユーザーが検索結果を「クリア」し、DataContextを「行」に再プラグインする必要があります(上記のスニペット内)。

私には何が欠けていますか?

+0

前にコンテキストを再設定し、あまりにも私のために働きましたか?これはうまくいくはずです。 –

+0

あなたのコードの周りにチックを追加すると、ジェネリックコードも投稿できるはずです。 – Oskar

+0

どうやらそれを行う方法は、そのデリゲート(行をフィルタリングする)をItemsコレクションのFilterプロパティに直接割り当てることです。私は仕事に着くとこれを試してみるつもりです。私は物事がどのようになっているかを報告します。 –

答えて

0

this question.で似たような問題が発生しているようです。コメントでは、datacontextをnullに設定してから再割り当てすると動作しません。

おそらく、その回答に記載されているようにアイテムコレクションを変更する必要がありますか?

0

ItemsSourceプロパティの設定を試しましたか?

3

私は同様の問題に遭遇しました。いくつかのスタイル値を変更した後、DataGridでコンバータを再適用する必要がありました。私このため

が働いた:

myGrid.Items.Refresh() 

それが表示され、それはあなたのために働くかもしれので、ルールのすべてを再適用します。

1

myGrid.Items.Refreshは()ちょうどあなたがdataGrid.DataContext = filteredRowsを割り当てるときに何が起こるか

public void GridExamsRefresh() 
{ 
    grdExamenes.ItemsSource = (this.objPacienteOfContext).Exams; 
    grdExamenes.Items.Refresh(); 
}