我以一种可能不那么令人难以理解的方式问同样的问题,然后再试一次。
在我的ModelView中,我有很多类,每个类有两个相应的UserControl。相应UserControls的名称是“ue”+“classname”和“ub”+ classname。
在我的视图中,我有两个ContentControl并使用两个 Converter ,它们从原始类名(例如CriteriaList)转换为相应UserControl的实例(例如ueCriteriaList)。
什么功能:显示的UserControl实际上是想要的UserControl的实例(例如ueCriteriaList或ubCriteriaList)。这意味着Converter获取要显示的原始类的类名,并创建相应UserControl的功能实例。
什么不起作用:显示的UserControl不显示实际类的实例的实际内容。
以下是转换器的代码:
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
当我在“Return o”停止调试时,它会显示DataContext =“... CriteriaList”,其中包含实际实例的内容。但它没有在实际窗口中显示。
ContentControl绑定:
ContentControl Content="{Binding Path=my_aComponent,
Converter={StaticResource _ueControlConverter},
diag:PresentationTraceSources.TraceLevel=High,
UpdateSourceTrigger=PropertyChanged}"
我的问题: 1.我可以使用Converter将UserControls绑定到使用“相关”名称来替换类吗?
我的错误是什么?
如何显示实际类实例的内容?
感谢您的回答。