2010-03-15 61 views
15

任何人都可以建议显示文本块(带有诸如“List Empty”之类的文本)的最佳方式,以便将其可见性绑定到Items.Count。WPF列表框 - 空列表显示消息

我已经尝试了下面的代码,不能让它工作,所以认为我必须做错了。

<ListBox x:Name="lstItems" 
     ItemsSource="{Binding ListItems}"> 
    </ListBox> 
    <TextBlock Margin="4" FontStyle="Italic" FontSize="12" Text="List is empty" Visibility="Collapsed"> 
     <TextBlock.Style> 
      <Style TargetType="{x:Type TextBlock}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=lstItems, Path=Items.Count}" Value="0"> 
         <Setter Property="Visibility" Value="Visible" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style>        
     </TextBlock.Style> 
    </TextBlock> 

回答

26

代码中的问题是,在文本块中设置可见性的值比在样式中设置它的优先级高。所以,即使发生触发,触发器内的设置也不起作用。更改XAML到:

<TextBlock Margin="4" FontStyle="Italic" FontSize="12" Text="List is empty" > 
    <TextBlock.Style> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Setter Property="Visibility" Value="Collapsed" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ElementName=lstItems, Path=Items.Count}" Value="0"> 
        <Setter Property="Visibility" Value="Visible" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style>        
    </TextBlock.Style> 
    </TextBlock> 

当能见度的设置是所有的风格和它的作品(至少在我的示范项目)。

+0

谢谢,这解决了我的问题(和我的理解:))完全 – 2010-03-15 14:07:44

+1

@DavidWard:http://msdn.microsoft.com/en-us/library/ms743230.aspx – Will 2012-08-07 15:07:16