2

XML が同じクラス名を使用して無制限のレベルを持つ場合、最初のレベルを超えてツリービューを設定する際に問題が発生します。Xsd2Code を使用してオブジェクト クラスを作成しました。

この投稿が 3000 行にならないように、プロジェクトをダウンロードするためのリンクを含めます。ここからダウンロードできます

私の XML の例

<Testing>
  <Numbers>
    <Number val="1">
      <Number val="1.1">
        <Number val="1.1.1">
          <Number val="1.1.2" />
          <Number val="1.1.3" />
          <Number val="1.1.4" />
        </Number>   
      </Number>
      <Number val="1.2" />
      <Number val="1.3" />
      <Number val="1.4" />
    </Number>
    <Number val="2" />
    <Number val="3" />
    <Number val="4" />
  </Numbers>
  <Numbers>
    <Number val="5" />
    <Number val="6" />
    <Number val="7" />
    <Number val="8" />
  </Numbers>
</Testing>

XAML

<Window.Resources>
    <local:TestingXmlData x:Key="TestXML" />
</Window.Resources>

<Grid>
    <Grid.Resources>

        <HierarchicalDataTemplate x:Key="MainData" ItemsSource="{Binding Number1}"
                                  >
            <Border>
                <Label VerticalContentAlignment="Center">
                    <TextBlock Text="{Binding val}" VerticalAlignment="Center" TextWrapping="Wrap"></TextBlock>
                </Label>
            </Border>
        </HierarchicalDataTemplate>


        <HierarchicalDataTemplate x:Key="Test" ItemsSource="{Binding Number}"
                                  ItemTemplate="{StaticResource MainData}"
                                  DataType="{x:Type local:Number}"
                                  >
            <Border>
                <Label VerticalContentAlignment="Center">
                    <TextBlock Text="{Binding val}" VerticalAlignment="Center" TextWrapping="Wrap"></TextBlock>
                </Label>
            </Border>
        </HierarchicalDataTemplate>

    </Grid.Resources>

    <telerik:RadTreeView ItemsSource="{Binding Source={StaticResource TestXML}, Path=TestingDataSource}"
                         ItemTemplate="{StaticResource Test}"  
                         />
</Grid>

コードビハインド

public class TestingXmlData
{
    private Testing testing;

    public TestingXmlData()
    {
        this.TestingDataSource = new ObservableCollection<Number>();

        var t = AppDomain.CurrentDomain.BaseDirectory;
        testing = Testing.LoadFromFile(t + @"../../Test.xml");

        var numberBranch = (from tt in testing.Items
                   select tt.Number).ToList();

        foreach (var num in numberBranch)
            foreach (var entry in num)
                this.TestingDataSource.Add(entry);
    }

    public ObservableCollection<Number> TestingDataSource
    {
        get;
        set;
    }
}
4

1 に答える 1

1

おそらくあなたはすでにこれを解決していますが、私にとっては、x:Key と DataType を同時に定義した場合、DataTemplates (HierarchicalDataTemplate も同様) は正しく機能しませんでした。この質問は、DataTemplates の DataType について尋ねます。

このプロパティは、 StyleクラスのTargetTypeプロパティに非常に似ています。x:Keyを指定せずにこのプロパティをデータ型に設定すると、DataTemplateがその型のデータ オブジェクトに自動的に適用されます。これを行うと、x:Keyが暗黙的に設定されることに注意してください。したがって、このDataTemplatex:Key値を割り当てると、暗黙的なx:Keyが上書きされ、DataTemplateは自動的に適用されません。

x:Key を使用して 1 つの DataTemplate を作成し、DataType を使用して 2 つ目の DataTemplate を作成しました。これには、ContentTemplate が x:Key で DataTemplate に設定された ContentControl が 1 つだけありました。

于 2013-03-30T21:25:42.100 に答える