1

私は同じ質問をおそらくあまり理解できない方法で尋ねたので、もう一度やり直してください。

私の ModelView には、各クラスに対応する 2 つの UserControls を持つ多くのクラスがあります。対応する UserControls の名前は、"ue" + "classname" および "ub" + classname です。

私のビューでは、2 つの ContentControls があり、元のクラス名 (CriteriaList など) から対応する UserControl のインスタンス (ueCriteriaList など) に変換する 2 つのConverterを使用します。

機能: 表示されている 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.「相関」名を使用して、UserControls を対応するクラスにバインドするために Converter を使用できますか?

  1. 私の間違いは何ですか?

  2. 実際のクラス インスタンスの内容を表示するにはどうすればよいですか?

回答ありがとうございます。

4

0 に答える 0