0

私の英語が下手であることを許してください。うまく説明できることを願っています。Treview (SL4) で子ノードが表示されません。私はこの状況を持っています:

2 クラス:

Public Class My_Root
    Private My_Cod_Prod As String
    Public Property Cod_Prod() As String
        Get
            Return My_Cod_Prod
        End Get
        Set(ByVal value As String)
            My_Cod_Prod = value
        End Set
    End Property

    Private My_Desc_Prod As String
    Public Property Desc_Prod() As String
        Get
            Return My_Desc_Prod
        End Get
        Set(ByVal value As String)
            My_Desc_Prod = value
        End Set
    End Property

    Private My_Cod_Desc_Prod As String
    Public Property Cod_Desc_Prod() As String
        Get
            Return My_Cod_Desc_Prod
        End Get
        Set(ByVal value As String)
            My_Cod_Desc_Prod = value
        End Set
    End Property

    Private My_Items As New My_Child
    Public Property Items() As My_Child
        Get
            Return My_Items
        End Get
        Set(ByVal value As My_Child)
            My_Items = value
        End Set
    End Property


End Class



Public Class My_Child
    Implements INotifyPropertyChanged
    Dim Selezionato As Boolean = False
    Private My_Cod_PosFis As String
    Public Property Cod_PosFis() As String
        Get
            Return My_Cod_PosFis
        End Get
        Set(ByVal value As String)
            My_Cod_PosFis = value
        End Set
    End Property
    Private My_Desc_PosFis As String
    Public Property Desc_PosFis() As String
        Get
            Return My_Desc_PosFis
        End Get
        Set(ByVal value As String)
            My_Desc_PosFis = value
        End Set
    End Property

    Public Property Selezione
        Get
            Return Selezionato
        End Get
        Set(ByVal value)
            Selezionato = value
            NotifyPropertyChanged("Selezione")
        End Set
    End Property

    Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
    Public Sub NotifyPropertyChanged(ByVal propertyName As String)
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
    End Sub


End Class

次に、ObservableCollection を作成します。

Public Shared nodi As New ObservableCollection(Of My_Root)()

このように人々:

 Private Sub Compila_Class_My_Root()
   For Each Prod In Elenco_ASS_Prodotti_PosFiscali
                Dim NodoRoot As New My_Root

                    NodoRoot.Cod_Prod = Prod.PFIS_CODPROD
                    NodoRoot.Desc_Prod = Prod.PFIS_DESCOM
                    NodoRoot.Cod_Desc_Prod = Prod.PFIS_CODPROD & " - " & Prod.PFIS_DESCOM
                 Dim NodoChild As New My_Child
                    NodoChild.Cod_PosFis = Prod.PFIS_POSFIS
                    Dim desc_pos_fis As String = get_DescrizionePosFis(Prod.PFIS_POSFIS)
                    NodoChild.Desc_PosFis = desc_pos_fis
                    NodoRoot.Items = NodoChild
                nodi.Add(NodoRoot)
   Next

     MyTreeView.ItemsSource = nodi 

End Sub

そして、これは HierarchicalDataTemplate への XAML の一部です。

       <sdk:HierarchicalDataTemplate x:Key="MyNodeRoot">
            <sdk:HierarchicalDataTemplate.ItemsSource>
                <Binding Path="My_Root" />
            </sdk:HierarchicalDataTemplate.ItemsSource>
            <TextBlock Text="{Binding Path=Cod_Desc_Prod}" />
        </sdk:HierarchicalDataTemplate>

      <sdk:TreeView Name="MyTreeView"  ItemTemplate="{StaticResource MyNodeRoot}"/>

ここで、子ノードを表示する方法がわかりません。

4

2 に答える 2

0

私はVBの専門家ではありませんが、Itemsプロパティが配列ではないようです。次のように宣言する必要があると思います。

Public Property Items() As My_Child()

次に、Compila_Class_My_Rootメソッドで、NodoRoot.Itemsを設定するときに、ここでも配列を使用します。

Dim children As My_Child() = { NodoChild }
NodoRoot.Items = children

XAMLでは、HierarchicalDataTemplateのデータコンテキストはMy_Rootインスタンスであるため、My_Root(Cod_Desc_Prod)のプロパティにバインドできます。ItemsSourceは、My_Rootのプロパティにもバインドする必要があります。

<Binding Path="Items" />

または、冗長性の低い構文を使用することもできます。

   <sdk:HierarchicalDataTemplate x:Key="MyNodeRoot" ItemsSource="{Binding Items}">
        <TextBlock Text="{Binding Cod_Desc_Prod}" />
    </sdk:HierarchicalDataTemplate>

最後に、子がどのように見えるかを指定する必要があります。

<DataTemplate x:Key="MyChildTemplate">
    <StackPanel Orientation="Horizontal">
        <CheckBox IsChecked="{Binding Selezione, Mode=TwoWay}" />
        <TextBlock Text="{Binding Desc_PosFis}" />
        <!-- Or whatever you want here... -->
    </StackPanel>
</DataTemplate>

<sdk:HierarchicalDataTemplate x:Key="MyNodeRoot"
    ItemsSource="{Binding Items}"
    ItemTemplate="{StaticResource MyChildTemplate}"
    >
    <TextBlock Text="{Binding Cod_Desc_Prod}" />
</sdk:HierarchicalDataTemplate>
于 2013-01-31T15:35:25.217 に答える
0

アンドリュー、どうもありがとう。

私はクラスを取りました: My_Child

    Public Property Selezione
    Get
        Return Selezionato
    End Get
    Set(ByVal value)
        Selezionato = value
        NotifyPropertyChanged("Selezione")
    End Set
    End Property

そしてこのプロパティに追加されました:

     Private My_Cod_Prod As String
    Public Property Cod_Prod() As String
        Get
            Return My_Cod_Prod
        End Get
        Set(ByVal value As String)
            My_Cod_Prod = value
        End Set
    End Property

このように人々:私は修正しました

 Private Sub Compila_Class_My_Root()
    For Each Prod In Elenco_ASS_Prodotti_PosFiscali
            Dim NodoRoot As New My_Root

                NodoRoot.Cod_Prod = Prod.PFIS_CODPROD
                NodoRoot.Desc_Prod = Prod.PFIS_DESCOM
                NodoRoot.Cod_Desc_Prod = Prod.PFIS_CODPROD & " - " & Prod.PFIS_DESCOM
             Dim NodoChild As New My_Child
                NodoChild.Cod_PosFis = Prod.PFIS_POSFIS
                Dim desc_pos_fis As String = get_DescrizionePosFis(Prod.PFIS_POSFIS)
                NodoChild.Desc_PosFis = desc_pos_fis
                NodoChild.Cod_Prod = Prod.PFIS_CODPROD  '******   ADDED   ******'
                NodoRoot.Items = NodoChild
            nodi.Add(NodoRoot)
      Next

   MyTreeView.ItemsSource = nodi 

End Sub

次に、コレクション内のアイテムを検索します

    Private Sub MyTreeView_SelectedItemChanged(sender As Object, e As                    System.Windows.RoutedPropertyChangedEventArgs(Of Object)) Handles MyTreeView.SelectedItemChanged
    Dim myTreeView As TreeView = TryCast(sender, TreeView)
    Dim chkele As My_Child
    Dim chkprod As My_Root
    Dim elemento 'elemento selezionato
    Try
        chkele = myTreeView.SelectedItem

    Catch ex As Exception
        chkele = Nothing
    End Try
    If chkele Is Nothing Then
        '    ho selezionato il prodotto
        chkprod = myTreeView.SelectedItem
    End If


     Try
       elemento = (From ele In Elenco_ASS_Prodotti_PosFiscali Where ele.PFIS_CODPROD = chkele.Cod_Prod And ele.PFIS_POSFIS = chkele.Cod_PosFis).Single
    Catch ex As Exception

    End Try

    End Sub
于 2013-02-04T15:00:24.210 に答える