2010-03-25 4 views
2

Je travaille actuellement sur un problème dans lequel j'ai besoin d'intégrer un UserControl dans un autre UserControl. Mais, j'ai besoin de déterminer à l'exécution quel UserControl incorporé à instancier. Cela implique pour moi qu'une certaine forme de liaison de données et/ou mécanisme de sélection de modèle doit être invoqué, mais je ne suis pas sûr de savoir comment procéder avec l'approche pure XAML. Si je devais le faire avec du code, je définirais une sorte de contrôle de conteneur dans le UserControl parent, puis dans le code-behind, implémenterais une logique qui instancierait le UserControl enfant approprié et l'insérerait comme contenu dans le conteneur spécifié dans le UserControl parent. Est-ce que cela peut être fait en utilisant seulement XAML, ou est-ce qu'une sorte de code-behind est nécessaire?Sélection d'un UserControl à partir de XAML

Répondre

1

Si le choix de l'enfant UserControl est basé sur le type de DataContext, la meilleure façon de le faire est d'utiliser un ContentControl avec plusieurs DataTemplate s dans les ressources:

<ContentControl Content="{Binding SomeProperty"}> 
    <ContentControl.Resources> 
     <DataTemplate DataType="{x:Type local:Foo}"> 
      <local:UserControlForTypeFoo /> 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type local:Bar}"> 
      <local:UserControlForTypeBar /> 
     </DataTemplate> 
    </ContentControl.Resources> 
</ContentControl> 

Le ContentControl va choisir le DataTemplate approprié basé sur le type de SomeProperty. C'est comme ça qu'on le fait habituellement dans MVVM

+0

Cela ressemble beaucoup plus à ce que je cherche. Merci. – kmontgom

1

Je suppose que vous démarrez avec WPF, Si j'ai raison, ce que vous voulez ici plus d'un ItemsControl en XAML et définir ItemsSource (Collection de DataObjects) à lui, puis définir ItemsControl.ItemsTemplate pour donner DataTemplate approprié de l'objet DataObject . Tout repose sur les données et vous n'avez pas besoin de vous soucier de l'instanciation, WPF fera toutes ces créations visuelles.

+0

Merci, je vais jeter un coup d'oeil à ça. Cela semble un peu contre-intuitif, cependant ... – kmontgom

Questions connexes