问题描述
我试图基于相似项(具有相同属性的项)的数量,从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
一起使用呢?
我认为更干净的方法是使用转换器并将滤波器放置在转换器内部,但我找不到通过CollectionView
或ObservableCollection
的方法。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)