4

我有一个 Itemscontrol,用于显示从计时系统发送的开始信息列表。

如果车道号未显示(如果它为空或空白),我需要能够“关闭”/停止显示一组车道信息,然后如果计时器发送信息以重新打开车道然后显示再次数据。

我不能将其设置为仅删除所有内容,因为计时器会不断发送其信息,并且除车道编号之外的所有内容都会再次出现。

是否可以按条件显示/隐藏项目?

目前正在发生的事情

Lanes
1 ------
2 ------
  ------ <- other info remains
4 ------

我想要发生的事情

Lanes
1 ------
2 ------

4 ------

这是我的项目控制代码示例

<ItemsControl ItemsSource="{Binding CHeat.SwimList}" Margin="10,0" HorizontalAlignment="Left" VerticalAlignment="Top">
            <ItemsControl.Template>
                <ControlTemplate TargetType="ItemsControl">
                    <StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <Label Content="Lane" />
                            <Label Content="Pos" />
                            <Label Content="Swimmer" />
                            <Label Content="Club" />
                            <Label Content="Time" />
                        </StackPanel>
                        <ItemsPresenter/>
                    </StackPanel>
                </ControlTemplate>
            </ItemsControl.Template>

            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>

            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="35" />
                                <ColumnDefinition Width="30" />
                                <ColumnDefinition Width="150" />
                                <ColumnDefinition Width="50" />
                                <ColumnDefinition Width="80" />
                            </Grid.ColumnDefinitions>
                            <Label Grid.Column="0" Content="{Binding LaneNumber}" />
                            <Label Grid.Column="1" Content="{Binding Position}" />
                            <Label Grid.Column="2" Content="{Binding Swimmer}" />
                            <Label Grid.Column="3" Content="{Binding Club}" />
                            <Label Grid.Column="4" Content="{Binding Time}" />
                        </Grid>
                    </StackPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>

如果有一种方法我可以Content = ""根据 LaneNumber 为其他数据设置,那么我相信它可以工作,因为这样我就可以恢复绑定。

我对 WPF 相当陌生,所以额外的细节会很有帮助,非常感谢!

4

1 回答 1

2

你为什么不尝试使用该Visibility属性?您只需在您的 MVVM 或代码中创建一个公共属性,然后将其绑定到您要隐藏的元素。

 <StackPanel Visibility="{Binding ShowElement, Converter={StaticResource VisibilityConverter}, Mode=TwoWay}">

通过设置 ShowElement 的布尔值,您可以轻松隐藏或显示 StackPanel。

于 2013-08-19T06:44:48.513 回答