I have an abstract base class aComponent
and sub-classes CriteriaList
, Question
, etc.
For each sub-class I have two corresponding UserControl
s which have names like ueCriteriaList
, ubCriteriaList
, ueQuestion
, ubQuestion
, etc. (ue
stands short for "UserControl
with input elements", and ub
for "UserControl
with buttons".)
The DataContext
is the "ControllerClass" with a property with my_aComponent
as the getter for the actual aComponent
instance. When the aComponent
instance changes (for example to an instance of CriteriaList
), I want to load the corresponding UserControls (in this case ueCriteriaList and ubCriteriaList).
I have two converters ueControlConverter
and ubControlConverter
which take the class name (e.g. CriteriaList
) and return a UserControl
instance (in this case, ueCriteriaList
).
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
In XAML I have two ContentControl
s which bind Content="{Binding Path=my_aComponent, Converter={StaticResource _ueControlConverter}
and Content="{Binding Path=my_aComponent, Converter={StaticResource _ubControlConverter}
. The right UserControl
s are shown but without binding to my_aComponent
.
What can I do?