2010-05-28 3 views
1

У меня WebService ASMX, и есть классы:не может бросить TreeViewItem в TreeViewItem в МОФ

Country 

public string Name {get;set;} 
public string Code {get;set;} 
public List<Area> Areas {get;set;} 

Area 

public string Name {get;set;} 
public string Code {get;set;} 
public List<Regions> Provinces {get;set;} 

Provinces 

public string Name {get;set;} 
public string Code {get;set;} 

Я связываю это Mz TreeView WPF:

Country[] items = new MyService().GetListOfCountries(); 
structureTree.ItemsSource = items; 

Кодекс myTree:

<UserControl x:Class="ObjectsAndZonesSimpleTree" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

     <Grid> 
     <StackPanel Name="stackPanel1"> 

      <GroupBox Header="Choose" Height="354" Name="groupBox1" Width="Auto"> 

       <TreeView Name="structureTree" SelectedItemChanged="structureTree_SelectedItemChanged" Grid.Row="0" Grid.Column="0" ItemsSource="{Binding}" Height="334" ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Visible" Width="Auto" PreviewMouseRightButtonUp="structureTree_PreviewMouseRightButtonUp" FontFamily="Verdana" FontSize="12" BorderThickness="1" MinHeight="0" Padding="1" Cursor="Hand" Margin="-1"> 
        <TreeView.Resources> 
         <HierarchicalDataTemplate DataType="{x:Type MyService:Country}" 
            ItemsSource="{Binding Path=ListOfRegions}"> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text="{Binding Path=Name}"/> 
          </StackPanel> 
         </HierarchicalDataTemplate> 
         <HierarchicalDataTemplate DataType="{x:Type MyService:Region}" 
            ItemsSource="{Binding Path=Provinces}"> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text="{Binding Path=Name}"/> 


       </StackPanel> 
         </HierarchicalDataTemplate> 
         <DataTemplate DataType="{x:Type MyService:Province}" 
            ItemsSource="{Binding Path=ListOfCities}"> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text="{Binding Path=Name}"/> 
       </StackPanel> 
         </DataTemplate> 

        </TreeView.Resources> 
       </TreeView> 
      </GroupBox> 

     </StackPanel> 
    </Grid> 

</UserControl> 

Это дает мне нуль:

private void structureTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
     { 
TreeViewItem treeViewItem = structureTree.SelectedItem as TreeViewItem; 
} 

ответ

3

SelectedItem будет фактически содержать страну, область или регион (или null). Если вы действительно хотите TreeViewItem, вы можете сделать strutureTree.ItemContainerGenerator.ContainerFromItem(structureTree.SelectedItem).

+0

Я получаю ошибку: Ссылка на объект требуется для нестатического поля, метода или свойства 'System.Windows.Controls.ItemContainerGenerator.ContainerFromItem (object)' – user278618

+0

Можете ли вы разместить точный код, который вы использовали для этого? Похоже, вы пытались сделать «TreeView.ItemContainerGenerator», но вам нужно получить к нему доступ из этого конкретного дерева с помощью 'structureTree.ItemContainerGenerator'. – JustABill

2

Исправить. Вы должны ожидать, что страна будет выбрана как ваш выбранный элемент. WPF работает совершенно иначе, чем Windows Forms. Это все о привязке данных!

+0

Итак, я не могу получить родительский узел или делать мультиселекцию? :/ – user278618

+0

Вы можете. Но я не помню эту часть. Это определенно боль. –

Смежные вопросы