如果一个集合计数等于另一个集合计数,则WPF隐藏文本块

如果一个集合计数等于另一个集合计数,则WPF隐藏文本块,wpf,textblock,datatrigger,Wpf,Textblock,Datatrigger,喂 我正在设置WPF窗格,以便根据绑定到ListView的多个视图模型集合的值显示一些文本 文本显示在堆栈面板中,该面板显示集合中的视图数,然后是另一个文本块,该文本块显示是否有隐藏的视图 这是通过以下绑定实现的: Browser.Count=这是视图总数 BrowserItemCollectionView.Count=这是隐藏的视图数 基本上,如果Browser.Count==BrowserItemCollectionView.Count,我希望文本隐藏 这是XAML代码

我正在设置WPF窗格,以便根据绑定到ListView的多个视图模型集合的值显示一些文本

文本显示在堆栈面板中,该面板显示集合中的视图数,然后是另一个文本块,该文本块显示是否有隐藏的视图

这是通过以下绑定实现的:

Browser.Count=这是视图总数

BrowserItemCollectionView.Count=这是隐藏的视图数

基本上,如果Browser.Count==BrowserItemCollectionView.Count,我希望文本隐藏

这是XAML代码

                    <StackPanel Orientation="Horizontal">

                    <TextBlock x:Name="TotalCount"
                               Foreground="#FF6F6F6F">
                        <Run Text="{Binding Path=Browser.Count, Mode=OneWay}" />
                        <Run Text=" Views" />
                    </TextBlock>
                    
                    <TextBlock x:Name="SearchCount"
                               Foreground="#FF6F6F6F">
                        <TextBlock.Style>
                            <Style TargetType="TextBlock">

                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding Path=BrowserItemCollectionView.Count, Mode=OneWay}"
                                                 Value="---SOME CLEVER BINDING HERE---">
                                        <Setter Property="UIElement.Visibility"
                                                Value="Hidden" />
                                    </DataTrigger>
                                </Style.Triggers>

                            </Style>
                        </TextBlock.Style>
                        <Run Text=", ("></Run>
                        <Run Text="{Binding Path=BrowserItemCollectionView.Count, Mode=OneWay}"></Run>
                        <Run Text=" visible.)"></Run>
                    </TextBlock>

                </StackPanel>

因此,我认为这将很容易改变上面的DataTrigger:

                <DataTrigger Binding="{Binding Path=BrowserItemCollectionView.Count, Mode=OneWay}"
                             Value="{Binding Path=Browser.Count, Mode=OneWay}">
                       <Setter Property="UIElement.Visibility"
                               Value="Hidden" />
                </DataTrigger>

但这不起作用,因为错误表明无法将值设置为绑定

最简单的方法是什么


谢谢。

您可以将
DataTrigger
多重绑定一起使用

<DataTrigger Value="True">
    <DataTrigger.Binding>
        <MultiBinding Converter="{StaticResource MyCustomConverter}">
            <Binding Path="BrowserItemCollectionView.Count" />
            <Binding Path="Browser.Count" />
        </MultiBinding>
    </DataTrigger.Binding>
    <Setter Property="UIElement.Visibility" Value="Hidden" />
</DataTrigger>
第二个选项是在视图模型上创建一个bool属性,并在视图模型中创建一个将该属性设置为true/false的逻辑。绑定到
DataTrigger
中的该属性

private bool collectionsEqual;
public bool CollectionsEqual
{
    get { return collectionsEqual; }
    set
    {
        collectionEqual = value;
        OnPropertyChanged()
    }
}
...
<DataTrigger Binding="{Binding Path=CollectionsEqual}" Value="True">
    <Setter Property="UIElement.Visibility" Value="Hidden" />
</DataTrigger>
private bool collectionsEqual;
公共布尔集合相等
{
获取{返回集合相等;}
设置
{
collectionEqual=价值;
OnPropertyChanged()
}
}
...

谢谢。我收到错误“无法设置多重绑定,因为必须指定多值转换器”我是否缺少某些内容?干杯。@Archie456您是否设置了多重绑定转换器=“{StaticResource MyCustomConverter}”?您的转换器是否实现System.Windows.Data.IMultiValueConverter接口?可以!谢谢您的帮助。@Archie456如果有帮助,您可以将答案标记为已接受。我尝试过,但被告知我的代表低于15岁,因此由于某种原因不允许接受答案。。。我目前的代表级别是13。。。。
private bool collectionsEqual;
public bool CollectionsEqual
{
    get { return collectionsEqual; }
    set
    {
        collectionEqual = value;
        OnPropertyChanged()
    }
}
...
<DataTrigger Binding="{Binding Path=CollectionsEqual}" Value="True">
    <Setter Property="UIElement.Visibility" Value="Hidden" />
</DataTrigger>