HierarchicalDataTemplate для самоссылающейся таблицы - PullRequest
0 голосов
/ 29 марта 2012

Я пытаюсь реализовать HierarchicalDataTemplate для самоссылающейся таблицы в Silverlight 4.

enter image description here

Показывает все элементы в TreeViewкак 1 уровень вместо иерархического представления.Должно быть 3 уровня предметов.

enter image description here

Итак, я застрял, как это сделать ... Есть подсказка?Спасибо!

<UserControl x:Class="TreeViewCRUD.MainPage"
 xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"             
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:Crud="clr-namespace:TreeViewCRUD"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid>
           <sdk:TreeView Height="403" Margin="0,0,0,0"  Name="TreeView1" Background="Beige" >
        <sdk:TreeView.ItemTemplate>
            <sdk:HierarchicalDataTemplate ItemsSource="{Binding Divisions}" >
                <TextBlock Text="{Binding Name, Mode=OneWay}" Margin="5,0"></TextBlock>
           </sdk:HierarchicalDataTemplate>                
        </sdk:TreeView.ItemTemplate>
    </sdk:TreeView>
    </Grid>
</UserControl>

и C #

 void client_GetDivisionsCompleted(object sender, MyService.GetDivisionsCompletedEventArgs e)
        {
            var lst = e.Result;
            try
            {
                TreeView1.DataContext = lst;
                // TreeView1.ItemsSource = lst;
                TreeView1.ItemsSource =  lst.Where(a=>a.DivisionID != null);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
                MessageBox.Show(ex.StackTrace.ToString());
            }
        }

1 Ответ

1 голос
/ 29 марта 2012

Я подозреваю, что ваш XAML правильный (в основном) и проблема в данных. Я предполагаю, что lst содержит некоторые данные, такие как

ID    DivisionID  Divisions1
1     null        (List<Division>)
2     1           (List<Division>)
3     2           (List<Division>)

Когда то, что вам действительно нужно, lst, чтобы быть

ID    DivisionID  Divisions1
1     null        (List<Division>)

Теперь lst [0] .Divisions1 будет

ID    DivisionID  Divisions1
2     1           (List<Division>)

И, наконец, lst [0] .Divisions1 [0] .Divisions1 будет

ID    DivisionID  Divisions1
3     2           (List<Division>)

Убедитесь, что данные из WCF поступают с неповрежденными навигационными свойствами. Даже если lst показывает все 3 элемента, а не только один верхний уровень, вы сможете фильтровать это на стороне клиента.

Последнее, что я заметил, это то, что вы используете ItemsSource="{Binding Divisions}" для привязки. Однако на диаграмме классов имя свойства равно Divisions1

...