2012-01-15 14 views
1

ツリービューと「アイテムがありません」というメッセージのスタックパネルがあります。ツリービューのアイテムが空でない場合、パネルを非表示にしたいと思います。ここで 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; 
} 

<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に結合し、それに応じてコンバータを変更したり、コンバータより適切であろうDataTriggerStyleを使用し、更新されない、(そのコレクションの内容はいえません)に変更はありません。

このような何か:

<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

はい、私はすべてのことを知って、私はちょうど混在デフォルト値よ! :) どうもありがとう! –

関連する問題