2015-11-19 7 views
0

У меня есть следующая задача: создать дерево, которое пользователь может изменить через интерфейс приложения - добавить новые элементы, удалить существующий. Элемент управления TreeView должен быть привязан к соответствующему списку в коде.WPF - привязка Teeview к списку

Элементы в дереве - это объекты CriteriaItem.

public class Subcriteria 
{ 
    public Subcriteria(string header) 
    { 
     Title = header; 
     subcriterias = new ObservableCollection<Subcriteria>(); 
    } 
    public string Title { get; set; } 
    public ObservableCollection<Subcriteria> subcriterias { get; set; } 
} 

public class Criteria 
{ 
    public Criteria(string header) 
    { 
     Title = header; 
     criterias = new ObservableCollection<Subcriteria>(); 
    } 
    public string Title { get; set; } 
    public ObservableCollection<Subcriteria> criterias { get; set; } 
} 


public MainWindow() 
{ 
    InitializeComponent(); 

    public ObservableCollection<Alternative> _alt = new ObservableCollection<Alternative>(); 
    Criteria root = new Criteria("root");    
    criteriaBundle.Add(root); 
    trvMenu.DataContext = _alt; 
    } 

XAML:

<TreeView Name="trvMenu" Grid.Row="2" ItemsSource="{Binding criteriaBundle}"> 
     <TreeView.ItemTemplate> 
      <HierarchicalDataTemplate ItemsSource="{Binding criterias}"> 
       <TextBlock Text="{Binding Title}" /> 
       <HierarchicalDataTemplate.ItemTemplate> 
        <HierarchicalDataTemplate ItemsSource="{Binding subcriterias}"> 
         <TextBlock Text="{Binding Title}" /> 
         <HierarchicalDataTemplate.ItemTemplate> 
          <DataTemplate> 
           <TextBlock Text="{Binding Path=Title}"/> 
          </DataTemplate> 
         </HierarchicalDataTemplate.ItemTemplate> 
        </HierarchicalDataTemplate> 
       </HierarchicalDataTemplate.ItemTemplate> 
      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate>   
</TreeView> 

Но это не работает. Не могли бы вы помочь мне со связыванием?

+0

Во-первых, это DataContext для TreeView? – Spawn

+0

@Spawn Title of CriteriaItem – Irina

+0

Является ли root общедоступной собственностью в вашем datacontext? – user1672994

ответ

0

Вы должны изменить свой код-за так:

1) Вы должны установить DataContext, если вы используете связывание

2) Вы можете использовать только свойства связывания, а не поля

Мои личный совет, который Вы должны прочитать о связывании основной и MVVM

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 

     criteriaBundle = new ObservableCollection<CriteriaItem> {new CriteriaItem("root")}; 
    } 

    public ObservableCollection<CriteriaItem> criteriaBundle { get; set; } 
} 

EDIT: enter image description here

+0

thanx для консультации. Я прочитал несколько ресурсов, посвященных этой теме, но они ничего не упоминают о DataContext – Irina

+0

@Irina Помогла ли вам мой ответ? – galakt

+0

@ Irina Я тестировал код, и он работает. Я приложил изображение. Убедитесь, что вы сделали все правильно – galakt

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