2012-01-15 56 views
1

我有一個treeView和一個消息「沒有項目」的堆棧面板。所以,如果treeView的項目不是空的,我想隱藏面板。在TreeView的項目上綁定

這是我的XAML例如:

<TreeView Name="treeDocs" Grid.ColumnSpan="2"/> 
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Center" 
Margin="51,20,51,0" Name="stkNoDocs" 
Visibility="{Binding ElementName=treeDocs, Path=Items, 
Converter={StaticResource ResourceKey=ItemsToVisibilityConverter}}"> 

這裏是我的轉換器的轉換方法:

public object Convert(object value, Type targetType, object parameter, 
System.Globalization.CultureInfo culture) 
{ 
    return ((ItemCollection)value).Count == 0 ? Visibility.Visible : Visibility.Collapsed; 
} 

我用Style屬性是這樣的:

<StackPanel.Style> 
    <Style TargetType="StackPanel"> 
      <Setter Property="Visibility" Value="Visible"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ElementName=treeDocs, Path=Items.Count}" Value="0"> 
        <Setter Property="Visibility" Value="Hidden"/> 
       </DataTrigger> 
      </Style.Triggers> 
    </Style> 
</StackPanel.Style> 
  • 但結果仍然相同。

而在設計模式中一切正常完美!但事實上面板總是可見的......問題是什麼?

謝謝!

回答

2

存儲在Items的情況下不會改變(其收藏的內容做雖然),因此綁定沒有更新,結合Items.Count並相應地改變轉換器或使用StyleDataTrigger這比一個轉換器更合適。

事情是這樣的:

<StackPanel.Style> 
    <Style TargetType="{x:Type StackPanel}"> 
     <Setter Property="Visibility" Value="Collapsed"/> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Items.Count, ElementName=treeDocs}" 
         Value="0"> 
       <Setter Property="Visibility" Value="Visible"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</StackPanel.Style> 

(默認可視性需要,因爲dependency property precedence二傳手進行設置)

+0

是的,我都知道,我只是混默認值! :) 非常感謝! – 2012-01-15 22:47:17