2009-08-19 24 views
3

TreeViewには、HierarchicalDataTemplate(以下に示す)があり、データセットのデータ関係にバインドされています。親ノードは親パーツを表し、子は親を構成するパーツを表します。場合によっては、親レベルのチェックボックスをチェックして、パーツ全体をすべての子要素で置き換えることを示します。この時点で、親の新しい部品番号を入力するためのテキストボックスが表示されます。これまで私はそれを働かせてきました。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のみのアプローチではありませんが、それはあなたのニーズに合うかもしれません:

はこのようになりますあなたのViewModel /クラスそれは、結合された対あなたの-親品目言います:SW、基本的に

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

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

あなたような何かを試みることができますチェックボックスをオンにしている間に、空のリストを持つchildrenコレクションを削除します。

関連する問題