将控件的可见性绑定到ItemsControl内具有相同属性的项目数

问题描述

我试图基于相似项(具有相同属性的项)的数量,从ItemControl内的Item设置控件的Visibility属性。 我没有使用MVVM模式,绑定是在“代码隐藏”中完成的。

详细说明主题

我有一个ItemsControl,该控件从其ObservableCollection来源的CollectionView的Code Behind中填充。 CollectionView具有一个基于名为displaytip的类的属性的GroupDrescription:

var collectionViewA = new CollectionViewSource { Source = PartiGUI }.View;
PropertyGroupDescription groupDescription = new PropertyGroupDescription("displaytip");
collectionViewA.GroupDescriptions.Add(groupDescription);
icPartiGroupedA.ItemsSource = collectionViewA;

在XAML代码中,我有一个HeaderTemplate,因此CollectionView中的项目是通过分组显示的。 我想基于具有相同组名的Visibility中的项目数,在Item控件中设置控件的CollectionView属性。 如果该项目是组中唯一的项目,那么我不希望控件可见。如果还有更多项目,我希望每个项目都能看到该控件。 起初,我正在考虑使用触发器。我在页眉中放置了一个隐藏控件,该控件绑定到该组的项目计数。我使用了这种方法,因为这是唯一可以获取同一组内项目的ItemCount的地方。然后,在触发器处,我尝试按名称标识控件。

<ItemsControl x:Name="icPartiGroupedA">
    <ItemsControl.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Text="{Binding Path=Name}" />
                        <TextBlock x:Name="ElementeGrupateCount" Text="{Binding ItemCount,UpdateSourceTrigger=PropertyChanged}"></TextBlock>
                    </StackPanel>
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
        </GroupStyle>
    </ItemsControl.GroupStyle>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
          <Stackpanel>
             <TextBox Text="{Binding SomeProperty}"/>
             <StackPanel>
                <Button>TestButton1</Button>
                <StackPanel.Style>
                    <Style targettype="StackPanel">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=ElementeGrupateCount,Path=Text,UpdateSourceTrigger=PropertyChanged}" Value="1">
                                <Setter Property="Visibility" Value="Collapsed" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </StackPanel.Style>
              </StackPanel >
           </StackPanel >
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
                    

使用此触发器,我收到此错误System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=ElementeGrupateCount'. BindingExpression:Path=Text; DataItem=null; target element is 'StackPanel' (Name=''); target property is 'NoTarget' (type 'Object')

我很难使它起作用,我认为我的方法不好,因为我要引用的控件放在标题内。

有没有办法专门与Trigger一起使用呢? 我认为更干净的方法是使用转换器并将滤波器放置在转换器内部,但我找不到通过CollectionViewObservableCollection方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)