我有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的节点,但不更改数据源。有可能,怎么样?
答案 0 :(得分:0)
将TreeElement.Children的类型从List更改为ObservableCollecton。而不是隐藏视图中的项目,只需从ViewModel中的底层集合中删除tme。