2012-01-18 5 views
0

私は単純なことをやろうとしているようですが、これを達成するためにいくつかの本当に奇妙な方法を使っています。DataGrid - すべての列が作成された後のイベントですか?

多くのカスタム生成カラムを持つSilverlight DataGridオブジェクトがいくつかあります。これらの列は、AutogenerateColumnイベントの1つの間に生成されます。すべての列が生成され表示されたら、幅と順序を同期させたい(別のデータを表示するが、非常に似た方法でいくつかの "リンク"されたグリッドを作成する)。

私が直面している問題は? DataGridには、すべてのデータが読み込まれて列が描画された後に発生するイベントはありません。

当分の間、私はLayoutUpdatedイベントを使用しており、列カウントが必要であるかどうかを確認しています。これは動作しますが、これは醜い回避策であると感じることを揺さぶることはできません。

DataGridによってすべての列が作成されるとすぐに、より良い方法がありますか?

+0

[DataGrid.Loaded](http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.loaded(v = vs95).aspx)はどうですか? – Prescott

+0

'DataGrid.Loaded'は、オブジェクトが最初に読み込まれたときにのみ発生します。そうではありませんか?データをリフレッシュまたは変更するときには、イベントを再度呼び出す必要があります(すべてのグリッドを再同期する必要があるため)。 – Shaamaan

+0

ああ、ええと。ドキュメントを読むことから、LayoutUpdatedがあなたの最善の選択肢であるようです。 – Prescott

答えて

0

私はLayoutUpdate ... sadを使用してしまいましたが、そこにはあります。

0

すべての列を手動で編集すると仮定して、列の更新は設定した後に行われるため、itemSourceを割り当てた後にメソッドを呼び出すことができます。

+0

質問に書いたように、列は 'AutoGeneratingColumn'イベントの1つで作成されます。したがって、 'ItemSource'が割り当てられた直後は表示されません。 – Shaamaan

+0

あなたは 'ItemsSource'を割り当てます...列を追加するためにあなたが' AutoGeneratingColumn'イベントのために登録したとき、すべてのハンドラーが処理されるまで、イベントはブロックされます...だから、大丈夫です。 – ferdyh

+0

私はあなたのコメントをよく理解していません。 'AutoGeneratingColumn'イベントは、' ItemSource'が割り当てられる前に登録されます。そうでなければ、余分な列を生成することはできません(私が完全に異なる瞬間にそれを行い、 'AutoGeneratingColumn'を完全に廃止しない限り)。コードの仕組みに従えば、 'ItemSource'が割り当てられ、現在のメソッドが終了した後にイベントが発生します。 – Shaamaan

関連する問題