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ます。コレクションは を実装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;
    }
}

VisibilityTextBoxのプロパティのバインドを次のように変更します。

<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 が返されます。Converter は、System.Convert.ToBooleanwhich を使用して 0 を に変換しfalse、他のすべての値をに変換しtrueます。

False は として返されVisibility.Collapsed、True は として返されますVisibility.Visible

于 2012-12-20T08:34:12.770 に答える