繁体   English   中英

WPF树视图项目可见性绑定到属性+静态变量

[英]WPF treeview item visibility binding to property + static variable

我有一个WPF树视图,节点的可见性取决于它们的“已删除”绑定属性:

    <Style x:Name="SelectedTreeItem" TargetType="TreeViewItem">
    <EventSetter Event="MouseRightButtonDown" Handler="TreeSetup_MouseRightButtonDown"/>
          <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
          <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/>
          <Setter Property="Visibility" Value="Visible" />
          <Style.Triggers>
            <DataTrigger Binding="{Binding Deleted}" Value="True">
               <Setter Property="Visibility" Value="Collapsed" />
            </DataTrigger>
          </Style.Triggers>
   </Style>

我想添加一些忽略此已删除属性值的方法。 这可以通过按钮“显示已删除的项目”来实现。 我不想更改“已删除”值,而是要添加一个全局条件,以强制此绑定忽略,直到再次按下该按钮。

您可以通过MultiDataTrigger.Conditions做到这一点。 这是可见性的示例:

<Style>
            <Setter Property="Control.Visibility" Value="Visible" />
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding Path=IsPropA}" Value="false" />
                        <Condition Binding="{Binding Path=IsPropB}" Value="false" />
                    </MultiDataTrigger.Conditions>
                    <Setter Property="Control.Visibility" Value="Hidden" />
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>

我结合静态资源使用了其他答案

<Style>
        <Setter Property="Control.Visibility" Value="Visible" />
        <Style.Triggers>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding Path=IsPropA}" Value="false" />
                    <Condition Binding="{Binding Source={StaticResource ClassName},Path=PropertyName}" Value="False"/>                                    
                </MultiDataTrigger.Conditions>
                <Setter Property="Control.Visibility" Value="Hidden" />
            </MultiDataTrigger>
        </Style.Triggers>
    </Style>

只需在Window资源下创建本地资源:

    <Window.Resources>
    <local:ClassName x:Key="ClassName"/>

然后用于显示是否已删除的按钮:

     private void btnApply_Click(object sender, RoutedEventArgs e)
    {
        //ApplyGeneralChanges();
        var item = this.FindResource("ClassName") as ClassName;
        item.DisplayDeleted = !item.DisplayDeleted;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM