2009-08-19 2 views
3

У меня есть TreeView с HierarchicalDataTemplate (показано ниже), связанный с отношением данных в наборе данных. Родительские узлы представляют родительские части, а дети представляют части, составляющие родителя. В некоторых случаях пользователь будет устанавливать флажок на родительском уровне, чтобы указать, что они заменяют всю часть всеми ее дочерними элементами. В этот момент появится текстовое поле для ввода нового номера детали для родителя. Пока у меня это работает.Использование HierarchicalDataTemplate.Triggers для воздействия на элементы управления в ItemTemplate

Что мне нужно для помощи, это скрыть детей, когда установлен флажок parent. Я приближался к этому из пути триггера, но я не могу сделать ссылку на какой-либо элемент управления в ItemTemplate из триггера в HierarchicalDataTemplate.Triggers. Возможно, это невозможно?

<HierarchicalDataTemplate ItemsSource="{Binding MyParts}"> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="{Binding Description}" /> 
     <CheckBox x:Name="MyCheckBox" IsChecked="{Binding ReplaceParent}"></CheckBox> 
     <TextBox x:Name="NewParentPartNumberTextBox" Text="{Binding NewPartNumber}" Visibility="Collapsed"></TextBox> 
    </StackPanel> 
    <HierarchicalDataTemplate.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding ChildPartNumber}" /> 
       <TextBox Text="{Binding NewChildPartNumber}" /> 
      </StackPanel> 
     </DataTemplate> 
    </HierarchicalDataTemplate.ItemTemplate> 
    <HierarchicalDataTemplate.Triggers> 
     <Trigger SourceName="MyCheckBox" Property="IsChecked" Value="True"> 
      <Setter TargetName="NewParentPartNumberTextBox" Property="Visibility" Value="Visible"/> 
     </Trigger> 
    </HierarchicalDataTemplate.Triggers> 
</HierarchicalDataTemplate> 

ответ

0

Это не XAML-единственный подход, но он может удовлетворить ваши потребности:

Произнесите ViewModel/класс, что-является гранично-на-ваш-родитель элемента выглядит следующим образом :

public class ItemViewModel 
{ 
    public bool ReplaceParent {get; set;} 
    public ObservableCollection<ItemViewModel> MyParts {get; set;} 
} 

Вы могли попробовать что-то вроде:

public class ItemViewModel 
{ 
    private bool _replaceParent; 
    private ObservableCollection<ItemViewModel> _originalParts = ....; 
    public bool ReplaceParent 
    { 
     get { return _replaceParent; } 
     set 
     { 
      MyParts = value ? 
         new ObservableCollection<ItemViewModel>() : 
         _originalParts; 
      // omit: any property changed logic  
     } 
    } 
    public ObservableCollection<ItemViewModel> MyParts {get; set;} 
} 

В основном, программные средства выйдите из коллекции детей с пустым списком, пока вы установите флажок.

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