当绑定到空虚时,如何获取绑定控件以报告“空”?

时间:2011-05-22 21:44:15

标签: data-binding windows-phone-7 rss

我正在尝试从here扩展RSS阅读器示例。

我已将应用转换为全景。我已经做到了,所以第一个全景项目加载了我的Feed,第二个项目的类别带有相应的复选框。这些类别被数据绑定到Categories类,该类将从XML文件中填充。

无论如何,'我的供稿'部分的代码如下:

<TextBlock x:Name="ItemName" Text="{Binding ItemTitle}" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="ItemDetails" Text="{Binding ItemDetails}" Style="{StaticResource PhoneTextSubtleStyle}"/>

并且当列表中没有供稿时,我试图让它显示“空”(当选中相邻面板中的复选框时,将填充供稿)。所以我将此代码添加到MainPage.xaml.cs中的OnNavigatedTo方法

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    this.DataContext = App.Model;
    base.OnNavigatedTo(e);

    // If there are no feeds yet, let the user know
    if (App.Model.FeedItems.Count == 0)
    {
        App.Model.FeedItems.Add(
                    new ViewModel.ItemModel()
                    {
                        ItemDetails = "",
                        ItemTitle = "Empty!",
                        ItemLink = "#"
                    }
                        );
    }
}

但这不是正确的方法。现在如果我导航到另一个页面并返回并且列表中有feeditems,我仍然会获得“Empty”,然后是项目。我该如何解决这个问题?

另外,当“空!”实际上有效,我仍然可以点击链接(上面的ItemLink);如何禁用此案例的点击事件?

2 个答案:

答案 0 :(得分:0)

我昨晚发布了一篇关于如何扩展ListBox控件以获得空数据模板的巧合。它应该很容易扩展到像Panorama或Pivot控件这样的东西。

基本理论是您使用“无项目文本”进行内容控制,并根据ListBox是否包含项目来控制它和ListBox的可见性。

您可以在Extending the WP7 ListBox处阅读。

答案 1 :(得分:0)

除了Nigel的扩展ListBox之外,您至少还有几种可能的解决方案:

  • 创建一个UserControl嵌入ListBox以及一个显示“Empty”文本的TextBlock,并根据Feed列表的内容使该UserControl切换ListBox或TextBlock的可见性。
  • 使用Silverlight Toolkit中的LongListSelector替换ListBox,并设置LongListSelector的ListHeader属性,以便在Feed列表为空时显示“Empty”文本。