0

私は caliburn.micro を使用して Silverlight 5 で作業しており、ItemsSource を介してバインドされたグリッドの読み込みが完了した後に列のサイズを変更するコードを実行したいと考えていました。

DataGrid と C1FlexGrid の両方のロードされたイベントは、画面に移動し、画面を離れてから戻るまで発生しません。非 mvvm/non-caliburn.micro プロジェクトで Loaded イベントをサブスクライブすると、ロードされたイベントは期待どおりに (すぐに) 発生します。

現時点では、列のサイズを変更したいだけですが、この問題は将来のコーディングを心配しています.Caliburn.Microを使用するときにコントロールイベントが期待どおりに機能することを期待できませんか? ロードされたイベントが発生するのはなぜですか? イベントが発生するはずのときにコードを実行できるようにする回避策はありますか?

ロードされたコールバックでは、列のサイズを簡単に変更できます。Caliburn.Micro ViewModel で行っていることのスニペットを次に示します。

Page3View currentView = null;
protected override void OnViewLoaded(object view)
{
    base.OnViewLoaded(view);
    currentView = (Page3View)view;

    //neither of these get fired until I look at the page, navigate away, then come back again.
    currentView.gridC1.Loaded += new RoutedEventHandler(gridC1_Loaded);
    currentView.gridNormal.Loaded += new RoutedEventHandler(gridNormal_Loaded);
}

void gridNormal_Loaded(object sender, RoutedEventArgs e)
{
    String testStr = ""; testStr += "some pointless code to break on";
}

void gridC1_Loaded(object sender, RoutedEventArgs e)
{
    currentView.gridC1.AutoSizeColumns(0, currentView.gridC1.Columns.Count - 1, 0);
}
4

1 に答える 1

0

発砲しない。Load最初のイベントが発生した後にアタッチされたハンドラー。

于 2012-11-01T11:11:30.377 に答える