2013-08-18 30 views
2

我有一個ItemsControl,用於顯示從計時系統發送的啓動信息列表。在條件控件上顯示/隱藏條目

如果車道編號沒有顯示(如果它爲空或空白),我需要能夠「關閉」/停止顯示一組車道信息,然後如果計時器發送信息切換車道返回然後再顯示數據。

我不能將它設置爲只刪除所有東西,因爲定時器不斷髮送它的信息,除了通道號之外的所有東西都會再次出現。

是否可以在條件上顯示/隱藏項目?

什麼正在發生的事情

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

我希望發生

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

4 ------ 

這裏什麼是我的ItemsControl代碼樣本

<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相當陌生,所以額外的細節將有助於非常感謝!

+1

'是否可以顯示/隱藏條件?' - >是的,它被稱爲'觸發器'有多種類型。對於你的情況,你可以使用'DataTrigger'來檢查Lane號是否爲空/空,如果是這樣,則將該項的'Visibility'設置爲'Hidden'。只需google即可查看「DataTrigger」的示例。另外如果你是WPF的新手,'Label'在WPF中有特定的用途。它不僅僅顯示「文本」,而且只是在顯示文本之後使用「TextBlock」。還要檢查一些WPF佈局的例子。你在做什麼不是「錯誤」,但可以做得更好。 – Viv

+0

@Viv謝謝,我會看看我能想出什麼應該工作。您認爲我可以通過哪種方式改善佈局?這是一個在製品,所以目前看起來有點整齊,但我更關心它的功能。 – pgwri

+0

不客氣。至於佈局,像'DataTemplate'中說的那樣,爲什麼當它是唯一的孩子時,將'Grid'嵌套在'StackPanel'內。除了**必要之外,WPF中的固定寬度也是**。在你的情況下,你的列大小是固定的,因此它不可擴展。您可以使用基於「*」的乘法器來根據可用的百分比爲網格控件分配空間。如果你只需要固定尺寸,你也可以在物品上指定寬度並去掉'Grid'。你不會在一天之內完成所有工作,如果你試着足夠好。只是繼續提煉。 – Viv

回答

1

爲什麼不嘗試使用Visibility屬性? 您只需在您的MVVM或代碼後面創建一個公共屬性,並將其綁定到您要隱藏的元素。

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

通過設置ShowElement的布爾值,您可以輕鬆地隱藏或顯示StackPanel。