【问题标题】:Listbox Item Template for an empty list空列表的列表框项目模板
【发布时间】:2011-03-17 10:04:56
【问题描述】:

我有一个列表框,其中包含在 XAML 中定义的项目模板,如下所示:

        <ListBox Name="listBoxDisruptions">

            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" Margin="0,0,0,10">
                        <TextBlock Text="{Binding text}" Foreground="Black" FontSize="29">Hello! some item</TextBlock>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>             

        </ListBox>

现在我想要在列表框的中心显示一行文本,以防此列表框的 ItemSource 为空。

XAML 是否支持某种无项模板?像这样:

    <ListBox Name="listBoxDisruptions">

                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal" Margin="0,0,0,10">
                            <TextBlock Text="{Binding text}" Foreground="Black" FontSize="29">Hello! some item</TextBlock>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate> 

<ListBox.NoItemTemplate>
<TextBlock Text="No Items to display"/>
</ListBox.NoItemTemplate>                   

            </ListBox>

那么?

【问题讨论】:

    标签: xaml windows-phone-7


    【解决方案1】:

    可能有一种 XAML 方法可以使用类似 WPF 的技术 - Listbox Item Template for an empty list

    然而,在 Overflow7 中,我厌倦了尝试使这些工作 - 所以我使用了一个稍微有点 hacky 的技巧,而不是在页面上添加一个额外的 TextBlock 然后使用:

    private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) { 
                listBox1.ItemsSource = data; 
    
                data.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(data_CollectionChanged); 
    
            } 
    
            void data_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { 
                if (data.Count == 0) 
                    textBlock1.Visibility = Visibility.Visible; 
                else 
                    textBlock1.Visibility = Visibility.Collapsed; 
            } 
    

    (从http://forums.create.msdn.com/forums/p/70755/431687.aspx学到的技巧)

    【讨论】:

    • 我本可以这样做,但 Silverlight 没有这样的东西感觉很奇怪。
    • 我做了类似的事情,但我只有一个 CollectionLengthToVisibility 转换器,用于根据集合长度隐藏/显示内容。
    • 第一行的链接链接到这个页面。
    【解决方案2】:

    您可以将文本块放在列表视图之外,然后使用转换器将文本块的可见性绑定到您用于列表视图的列表计数。

    编辑:要求的示例:-

    <ListView ItemsSource="{Binding MyItemSource}">
       <ListView.ItemTemplate>
         <DataTemplate>
           <Grid/>
         </DataTemplate>
       </ListView.ItemTemplate>
    </ListView>
    <TextBlock Text="Some text" Visibility="{Binding MyItemSource.Count, Converter={StaticResource CountToVisibilityConverter}}"/>
    

    在您的页面资源或应用程序中的资源字典中声明转换器,如下所示:

    <converters:CountToVisibilityConverter x:Key="CountToVisibilityConverter" />
    

    然后转换器可能是:

    public sealed class CountToVisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, string culture)
        {
            if (value != null)
            {
                var i = (Int32)value;
    
                if (i > 0)
                    return Visibility.Collapsed;
                else
                    return Visibility.Visible;
            }
            return Visibility.Collapsed;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, string culture)
        {
            return new NotImplementedException();
        }
    }
    

    【讨论】:

    • 您的建议有什么例子吗?
    猜你喜欢
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多