3

この問題は以前に解決されましたが、オンラインで見つけた例では理解できません。

クラスがあります。「ClassA」としましょう。このクラスには、「Property1」と「Property2」の 2 つの文字列プロパティと、「ClassB」にも 2 つのプロパティがある IEnumerable があります。ClassB のリストはすべてネストされたツリービューに表示されます

これらを次のようにツリービューに表示します。

-クラスA[0]
  ClassA.Property1
  ClassA.Property2
  -ClassA.ClassB タイトル
   クラスB[0]
   クラスB[1]
   等。
+クラスA[1]
+クラスB[2]

これを達成する方法は HierarchicalDataTemplates を使用することだと私は理解していますが、私が見つけることができるすべての例は、方法を教えてくれるだけです:

-クラスA[0]
  -ClassA.ClassB タイトル
   クラスB[0]
   クラスB[1]
   等。
+クラスA[1]
+クラスB[2]

テンプレートで ClassA のプロパティを取得する方法がわかりません。タイプ ClassA の DataTemplate になると思いますが、何かがクリックされません。

どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

1

さて、私は自分の質問に答えましたが、これが正しい方法だとは思いません。

ツリービューで itemtemplate を使用し、そのテンプレート内に別の itemtemplate を使用して別のツリービューを作成しました。

ただし、HierarchicalDataTemplates を見るのと比較して、これを見ると理解できます。

WPF:

    <TreeView HorizontalAlignment="Left" Name="treeView1" VerticalAlignment="Top">
        <TreeView.ItemTemplate>
            <DataTemplate>
                <TreeViewItem Header="{Binding FileName}">
                    <TextBlock Text="{Binding MetaData1}"/>
                    <TextBlock Text="{Binding MetaData2}"/>
                    <TreeViewItem ItemsSource="{Binding Mappings}" Header="Mappings">
                        <TreeViewItem.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*"/>
                                        <ColumnDefinition Width="17"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <TextBlock Text="{Binding Original}" Grid.Column="0"/>
                                    <TextBlock Text="->" Grid.Column="1" Margin="3,0,3,0"/>
                                    <TextBlock Text="{Binding Mapping}" Grid.Column="2"/>
                                </Grid>
                            </DataTemplate>
                        </TreeViewItem.ItemTemplate>
                    </TreeViewItem>
                </TreeViewItem>
            </DataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

クラス:

public class ClassA
{
    public string MetaData1 { get; set; }
    public string MetaData2 { get; set; }
    public string FileName { get; set; }
    public List<ClassB> Mappings { get; set; }
}

public class ClassB
{
    public string Original { get; set; }
    public string Mapping { get; set; }
}

私のデータ構造のクイック実装:

new List<ClassA>
                    {
                        new ClassA
                            {
                                FileName = "ClassA 1",
                                MetaData1 = "Prop 1",
                                MetaData2 = "Prop 2",
                                Mappings = new List<ClassB>
                                            {
                                                new ClassB
                                                {
                                                    Original = "BProp 1",
                                                    Mapping = "BProp 2"
                                                }
                                            }
                            },
                        new ClassA
                            {
                                FileName = "ClassA 2",
                                MetaData1 = "Prop 1",
                                MetaData2 = "Prop 2",
                                Mappings = new List<ClassB>
                                            {
                                                new ClassB
                                                {
                                                    Original = "BProp 1",
                                                    Mapping = "BProp 2"
                                                }
                                            }
                            }
                    };

誰かが私がこれをもっとうまくやるべきだった方法を知っているなら (HierachicalDataTemplates と DataTemplates を使って) 私はそのコードを見て、これを改善することにオープンです。

于 2010-09-08T17:53:51.287 に答える