在TreeView上绑定';s项目
本文关键字:项目 TreeView 绑定 | 更新日期: 2023-09-27 18:20:18
我有一个treeView和一个stackpanel,其中包含"没有项目"的消息。所以,如果treeView的项目不是空的,我想隐藏面板。
这是我的XAML示例:
<TreeView Name="treeDocs" Grid.ColumnSpan="2"/>
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Center"
Margin="51,20,51,0" Name="stkNoDocs"
Visibility="{Binding ElementName=treeDocs, Path=Items,
Converter={StaticResource ResourceKey=ItemsToVisibilityConverter}}">
这是我的转换器的转换方法:
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
return ((ItemCollection)value).Count == 0 ? Visibility.Visible : Visibility.Collapsed;
}
我使用过这样的Style属性:
<StackPanel.Style>
<Style TargetType="StackPanel">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=treeDocs, Path=Items.Count}" Value="0">
<Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
- 但结果仍然相同
在设计模式下,一切都很完美!但事实上面板总是可见的。。。怎么了?
谢谢!
存储在Items
中的实例永远不会更改(尽管它的集合内容会更改),因此绑定不会更新,绑定到Items.Count
并相应地更改转换器,或者使用带有DataTrigger
的Style
,这将比转换器更合适。
类似这样的东西:
<StackPanel.Style>
<Style TargetType="{x:Type StackPanel}">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Items.Count, ElementName=treeDocs}"
Value="0">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
(由于依赖属性优先级,需要在setter中设置默认可见性)