2009-08-19 123 views
3

我有一個TreeViewHierarchicalDataTemplate(如下所示)綁定到數據集中的數據關係。父節點代表父代部分,子代代表組成父代的部分。在某些情況下,用戶將檢查父級別的複選框,以指示他們正在用其所有孩子替換整個部分。此時會出現一個文本框供他們輸入父件的新部件號。到目前爲止,我有這樣的工作。使用HierarchicalDataTemplate.Triggers影響ItemTemplate中的控件

我需要幫助的是,當父母複選框被選中時隱藏孩子。我一直在觸發這條路徑,但似乎無法從HierarchicalDataTemplate.Triggers的觸發器中引用ItemTemplate中的任何控件。也許這是不可能的?

<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的方法,但它可能會滿足您的需求:

說你的視圖模型/類是-是綁定到你的父項看起來是這樣的:

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;} 
} 

基本上,SW當您勾選複選框時,請用空列表填寫兒童收藏。

相關問題