2012-02-28 26 views
0

私は以前この質問をしていましたが、回答が得られませんでしたが、今私は詳細を持っています。DataGridの列ヘッダーのソートアイコンの表示をプログラムで変更します

基本的には、wpfデータグリッド列に列ソートアイコンをプログラムで表示します。

私はこれを行うには、次のコードを持っている:

private void dtgMain_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) 
     { 
      dtgMain.Columns[0].SortDirection = ListSortDirection.Ascending; 
     } 

これは、列のソート順を設定するのではなく、グリッドを描画するときにアイコンが表示されませんようです。

メッセージボックスをメソッドに追加すると、正常に動作します。私の質問は二重です。なぜメッセージボックスはメソッドを動作させますか?そして、メッセージボックスを使用せずにどうすればそれを動作させることができますか?

これはこれでメッセージボックスでの作業方法であって、ここで

private void dtgMain_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) 
{ 
    MessageBox.Show("Here"); 
    dtgMain.Columns[0].SortDirection = ListSortDirection.Ascending; 
} 

編集 は、DataGrid

public void processLoad(string response) 
     { 
      XmlDataProvider provider = new XmlDataProvider(); 

      if (provider != null) 
      { 
       System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); 
       doc.LoadXml(response); 
       provider.Document = doc; 
       provider.XPath = "/moo/response/data/load/panel"; 
       dtgMain.DataContext = provider; 

      } 

     } 

のDataContextの設定された方法であり、あなたが必要な場合は私に知らせてくださいこれ以上の情報。

+0

あなたが記述した動作を再現することはできません。コードを実行すると、メッセージボックスが最初に表示されるかどうかにかかわらず、矢印が上に表示されます。あなたは、DataGridのDataContextを変更させる原因と何が起こっているのかについての情報を提供できますか? –

+0

Okボブが今アップロードしています – user589195

答えて

3

[OK]をクリックすると、DataContextの更新によって発生したデータレイアウトの変更が方向矢印を設定する呼び出しの後に完了しているため、設定した後でデータの変更が消去されている可能性があります。興味深いことに、私の場合は、メッセージボックスを置いても機能しませんでした。おそらく、メッセージスレッドが表示されている間にUIスレッドをハングアップしていたからです。

dtgMain.Dispatcher.BeginInvoke(new Action(() => 
    { 
     dtgMain.Columns[0].SortDirection = ListSortDirection.Ascending; 
    }), DispatcherPriority.ApplicationIdle); 

、それが動作するかどうかを確認:

あなたがディスパッチャキューに入れて同様の呼び出しでソート方向を設定する行を交換してみてもらえますか?

+0

これは私が起こっていたと思ったものです。私はあなたが提供したコードを追加しようとしましたが、 "2番目の(デリゲートタイプではないため、 'System.Delegate'型にラムダ式を変換することはできません" – user589195

+1

ああ、謝罪します。BeginInvokeコールがデリゲート型、単純なラムダだけではなく、私は上記のコードを編集しているので、現在動作しているかどうかを確認してください! –

+0

Brilliant。問題が解決しました。 、その後、データグリッドに新しい列を作成していた新しいdatacontextをロードしていますか? – user589195

関連する問題