2013-07-15 2 views
0

j'ai une classe de base abstraite aComponent et sous-classes CriteriaList, Question, etc.charge WPF UserControl dynamiquement

Pour chaque sous-classe I ai deux correspondant UserControl s qui ont des noms comme , ubCriteriaList, ueQuestion, ubQuestion , etc. (ue se tient l'abréviation de « UserControl avec des éléments d'entrée », et ub pour « UserControl avec des boutons ».)

le DataContext est le « ControllerClass » avec une propriété avec my_aComponent en tant que getter pour l'instance réelle aComponent. Lorsque l'instance aComponent change (par exemple pour une instance de CriteriaList), je souhaite charger les UserControls correspondants (dans ce cas, ueCriteriaList et ubCriteriaList).

I ont deux convertisseurs ueControlConverter et ubControlConverter qui prend le nom de classe (par exemple CriteriaList) et renvoyer une instance UserControl (dans ce cas,).

Public Class ueControlConverter 
    Implements IValueConverter 

    Public Function Convert(value As Object, targetType As Type, parameter As Object, 
          culture As System.Globalization.CultureInfo) As Object 
          Implements IValueConverter.Convert 
     Dim aComp As aComponent = value 
     Dim assemblyKlassenname As String = aComp.GetType.ToString 
     Dim assemblyName As String = Left(assemblyKlassenname, 
              assemblyKlassenname.IndexOf(".") + 1) 
     Dim klassenName As String = Right(assemblyKlassenname, 
              assemblyKlassenname.IndexOf(".") - 1) 
     Dim t As Type = Type.GetType(assemblyName & "ue" & klassenName) 
     Dim o As UserControl = Activator.CreateInstance(t) 
     o.DataContext = value 
     Return o 
    End Function 

    Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, 
           culture As System.Globalization.CultureInfo) As Object 
        Implements IValueConverter.ConvertBack 
     Return value 
    End Function 
End Class 

En XAML J'ai deux ContentControl s qui lient Content="{Binding Path=my_aComponent, Converter={StaticResource _ueControlConverter} et Content="{Binding Path=my_aComponent, Converter={StaticResource _ubControlConverter}. Les bons UserControl s sont affichés mais sans se lier à my_aComponent.

Que puis-je faire?

+1

Conseil: .NET est meilleur que VB6! 'Dim divisé As String = assemblyKlassenname.Split ({". "C), 2)' 'Dim assemblyKlassenname As String = split (0)' 'Dim klassenName As String = split (1)' – Ryan

Répondre

0

Vous devez également fournir le DataContext propriété par liaison pour vos ContentControl objets.

+0

Comment puis-je l'obtenir dans le Convertisseur et l'utiliser là? – PGoe

+0

Salut minitech - merci pour le montage et le conseil avec ".Split". – PGoe

+0

Salut @Potecaru Tudor, merci pour la réponse. Dans mon convertisseur, je peux voir que le UserControl généré a le Null DataContext. Cela ne change pas après mon "o.DataContext = valeur". Comment puis-je connecter l'objet UserControl généré avec mon DataContext ??? – PGoe