我正在使用 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);
}