空列表的Listbox项目模板

8

我有一个列表框,其中的项目模板在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>

现在我想要的是,在列表框的项目源为空的情况下,在列表框中心显示一行文本。

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>

所以呢?
2个回答

5
可能有一种使用类似于WPF技术的XAML方法来完成它 - 空列表的Listbox项模板
然而,在Overflow7中,我尝试让这些方法起作用感到无聊 - 所以我使用了一个稍微有点巧妙的技巧,而不是在页面上添加额外的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没有类似的东西。 - Ahmad Mushtaq
5
我做了类似的事情,但我只是使用了一个CollectionLengthToVisibility转换器来根据集合长度来隐藏/显示内容。 - i_am_jorf
第一行的链接指向此页面。 - Kyberias

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();
    }
}

你有什么建议的例子吗? - Patrick Hofman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接