3

データセット内のデータ関係にバインドされた (以下に示す) がありますTreeViewHierarchicalDataTemplate親ノードは親パーツを表し、子ノードは親を構成するパーツを表します。場合によっては、ユーザーが親レベルのチェックボックスをオンにして、パーツ全体をそのすべての子で置き換えることを示します。この時点で、親の新しい部品番号を入力するためのテキスト ボックスが表示されます。これまでのところ、私はそれを機能させています。

私が助けを必要としているのは、親のチェックボックスがチェックされているときに子を非表示にすることです。トリガー パスからこれにアプローチしてきましたが、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>
4

1 に答える 1

0

これは XAML のみのアプローチではありませんが、ニーズに合う場合があります。

ViewModel/class-that-is-bound-to-your-parent-item が次のようになっているとします。

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

基本的に、チェックボックスをオンにしている間、子コレクションを空のリストと交換します。

于 2012-11-14T19:10:25.437 に答える