我可以将UserControl绑定到具有从className到UserControl-Instance的转换器的类的实例

时间:2013-07-17 05:16:30

标签: wpf binding converter

我以一种可能不那么令人难以理解的方式问同样的问题,然后再试一次。

在我的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绑定到使用“相关”名称来替换类吗?

  1. 我的错误是什么?

  2. 如何显示实际类实例的内容?

  3. 感谢您的回答。

0 个答案:

没有答案