2011-10-31 3 views
1

J'ai vérifié le fil suivant et suivi l'exemple pour essayer de lier une vue dynamique: Caliburn.Micro: Create and Bind View programmaticallyImpossible de lier vue par programme dans Caliburn.Micro

Mon principal a une vue DataGrid avec le XAML suivant:

<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> 

Notez le StackPanel dans le DataTemplate. C'est ici que je veux injecter ma vue secondaire.

Mon modèle d'affichage a une fonction nommée PopulateTestSuiteDetails() qui est attaché à l'événement RowDetailsVisibilityChanged comme décrit dans le XAML:

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); 
} 

La fonction ne se laisse correctement quand j'invoquées déboguer mon programme. Cependant, il ne semble pas que ma sous-vue soit correctement attachée (ma sous-vue a un bouton de base et elle n'est pas visible quand une ligne de la grille de données est mise au point). Une idée pourquoi?

+0

Au lieu d'utiliser StackPanel, j'ai également essayé d'utiliser ContentControl avec le nom ActiveTestSuiteDetail. J'ai la même propriété dans mon modèle de vue. Cependant, il ne semble pas que la vue soit correctement attachée. – edc

Répondre

1

Il s'avère que je dois faire ce qui suit pour régler ma vue et mon modèle.

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

Où devez-vous faire cela? – MoonKnight

Questions connexes