3

当应该显示的集合为空时,我想显示一个文本块,上面写着“你没有数据”。

我可以通过使用转换器轻松地让它在页面加载时工作,但是由于当收集数据更改时不会收到通知,所以代码不起作用:-

TextBlock Visibility="{Binding Devices, Converter={StaticResource EmtpyListToVisibility}, Mode=OneWay}" Text="You have no devices added, please press the Add Device button on the application bar" TextWrapping="Wrap"></TextBlock>

<phone:LongListSelector Margin="0,12,0,0" ItemsSource="{Binding Devices, Mode=OneWay}" ItemTemplate="{StaticResource DeviceTemplate}" LayoutMode="List" VerticalAlignment="Top" >                       
</phone:LongListSelector>

在 Windows 8 应用程序中,我添加了一个名为 xxxHasRecords 的属性,然后我订阅了 Observable 集合 CollectionChanged 事件并使用了属性通知,以便可以更新我的 UI。我发现自己经常编写这段代码,所以必须有更好的处理方式!

谢谢

罗斯

4

2 回答 2

6

而不是绑定到ObservableCollection,您应该绑定到ObservableCollection.Count属性。集合 implements INotifyPropertyChanged,因此每当其大小发生变化时都会通知您的绑定。然后,您的价值转换器只需检查零。

于 2012-12-20T08:32:59.637 回答
1

在这种情况下,我使用BooleanToVisibilityConverter

public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        bool invert = false;

        if (parameter != null)
        {
            invert = System.Convert.ToBoolean(parameter);
        }

        bool isVisible = System.Convert.ToBoolean(value);

        if (invert)
        {
            isVisible = !isVisible;
        }

        return isVisible ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        Visibility result = (Visibility)Enum.Parse(typeof(Visibility), value.ToString(), true);

        return result == Visibility.Visible ? true : false;
    }
}

Visibility并将TextBox的属性的绑定更改为以下内容:

<TextBlock Visibility="{Binding Devices.Count, Converter={StaticResource boolToVisibilityConverter}, Mode=OneWay}"
    Text="You have no devices added, please press the Add Device button on the application bar"
    TextWrapping="Wrap">
</TextBlock>

当集合为空时,Count返回值 0。转换器使用System.Convert.ToBoolean它将 0 转换为false和所有其他值转换为true

False 返回 asVisibility.Collapsed和 true as Visibility.Visible

于 2012-12-20T08:34:12.770 回答