【问题标题】:WPF Hide items with trigger in treeviewWPF在树视图中隐藏带有触发器的项目
【发布时间】:2010-11-30 02:38:19
【问题描述】:

我有一个TreeView,其中我使用了HierarchicalDataTemplate。有了这个,我为我的不同项目(所有相同类型)着色。

点击页面中的CheckBox,我想隐藏一些项目(具有特定属性)。我测试了很多代码,但没有一个能正常工作。我正在寻找答案...

这是我的代码示例:

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();

        TreeElements tRoot = new TreeElements("Root", false);
        TreeElements t1 = new TreeElements("Node 1", false);
        TreeElements t11 = new TreeElements("Node 1-1", true);
        t1.Children.Add(t11);
        TreeElements t12 = new TreeElements("Node 1-2", false);
        t1.Children.Add(t12);
        tRoot.Children.Add(t1);
        TreeElements t2 = new TreeElements("Node 2", false);
        TreeElements t21= new TreeElements("Node 2-1", false);
        TreeElements t211 = new TreeElements("Node 2-1-1", false);
        t21.Children.Add(t211);
        t2.Children.Add(t21);
        tRoot.Children.Add(t2);
        trv.Items.Add(tRoot);
    }
}

public class TreeElements
{
    public string Description { get; set; }
    public List<TreeElements> Children { get; set; }

    public TreeElements(string description, bool error)
    {
        Description = description;
        _error = error;
        Children = new List<TreeElements>();
    }

    private bool _error;

    public bool Error
    {
        get
        {
            bool bValue = _error;
            foreach (TreeElements child in Children)
                bValue = bValue || child.Error;
            return bValue;
        }
    }
}

还有 XAML:

<Window x:Class="WpfApplication2.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">

    <Window.Resources>
        <HierarchicalDataTemplate x:Key="HDT_items" ItemsSource="{Binding Path=Children}">
            <TextBlock Text="{Binding Path=Description}" x:Name="txt" />
            <HierarchicalDataTemplate.Triggers>
                <DataTrigger Binding="{Binding Path=Error}" Value="true">
                    <Setter TargetName="txt" Property="Foreground" Value="Red" />
                </DataTrigger>
            </HierarchicalDataTemplate.Triggers>
        </HierarchicalDataTemplate>    
    </Window.Resources>

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <CheckBox x:Name="chk">Mask some items</CheckBox>

        <TreeView Grid.Row="1" x:Name="trv" ItemTemplate="{StaticResource HDT_items}" />
    </Grid>
</Window>

我希望在选中复选框时不显示 Error=false 的节点,但不更改数据源。有可能吗,怎么做?

【问题讨论】:

    标签: wpf triggers treeview datatrigger


    【解决方案1】:

    将 TreeElement.Children 的类型从 List 更改为 ObservableColleton。而不是在视图中隐藏项目,只需从 ViewModel 的基础集合中删除 tme。

    【讨论】:

    • 是的,谢谢,它与重建底层集合的函数一起使用。
    猜你喜欢
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 2020-09-05
    相关资源
    最近更新 更多