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

Ofc没有开火。Load在第一个事件触发后附加的处理程序。

于 2012-11-01T11:11:30.377 回答