2011-10-31 53 views
1

我检查了以下螺纹跟着尝试和动态绑定视图中的例子: Caliburn.Micro: Create and Bind View programmatically无法绑定视图以编程方式Caliburn.Micro

我的主要观点有以下XAML一个DataGrid:

<DataGrid Name="DataGridTestSuites" Grid.Row="1" 
     HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="12" 
     IsReadOnly="True" AutoGenerateColumns="False" 
     ItemsSource="{Binding TestSuites}" 
     RowDetailsVisibilityMode="VisibleWhenSelected" 
     cal:Message.Attach="[Event RowDetailsVisibilityChanged] = [Action PopulateTestSuiteDetail($this, $eventArgs)]"> 
<DataGrid.Columns> 
    <DataGridTextColumn Header="Name" Binding="{Binding Name}" /> 
    <DataGridTextColumn Header="Category" Binding="{Binding Category}" /> 
    <DataGridTextColumn Header="Assembly" Binding="{Binding AssemblyPath}" /> 
</DataGrid.Columns> 
<DataGrid.RowDetailsTemplate> 
    <DataTemplate> 
     <StackPanel x:Name="StackPanelTestSuiteDetail" /> 
    </DataTemplate> 
</DataGrid.RowDetailsTemplate> 
</DataGrid> 

请注意DataTemplate中的StackPanel。这是我想注入我的子视图的地方。

我的视图模型具有的功能名为PopulateTestSuiteDetails(),它被连接到如XAML中描述的RowDetailsVisibilityChanged事件:

public void PopulateTestSuiteDetail(DataModels.TestSuite testSuite, object eventArgs) 
{ 
    if (!(eventArgs is DataGridRowDetailsEventArgs)) return; 

    StackPanel stackPanel = (StackPanel)((DataGridRowDetailsEventArgs)eventArgs).DetailsElement.FindName("StackPanelTestSuiteDetail"); 

    var methodViewModel = IoC.Get<TestSuiteHelperMethodViewModel>(); 

    var methodView = new Harness.Views.TestSuiteHelperMethodView(); 

    stackPanel.Children.Add(methodView); 
    ViewModelBinder.Bind(methodViewModel, methodView, null); 
} 

功能也得到正确调用时调试我的程序。然而,它似乎没有像我的子视图被正确连接(我的子视图有一个基本的按钮,并且当数据网格行焦点时它是不可见的。)任何想法为什么?

+0

我没有使用StackPanel,而是尝试使用名为ActiveTestSuiteDetail的ContentControl。我在我的视图模型中拥有相同的属性。但是,它似乎并没有正确地附加视图。 – edc

回答

1

事实证明,我必须执行以下操作来设置我的视图和视图模型。

contentControl.Content = methodView; 
Caliburn.Micro.View.SetModel(methodView, methodViewModel); 
+0

你在哪里必须这样做? – MoonKnight