2012-07-24 17 views
6

Mam sytuację, w której pokazuję zestaw PivotItem s i (w zależności od sytuacji) ulubiony.Czy można ukryć (nie usunąć) element PivotItem?

Muszę być w stanie ukryć ten pivot, gdy lista zawierająca moje ulubione jest puste - ale musi się pojawić, gdy coś tam jest.

Teraz mógłby prostu usunąć go, ale co z tego scenariusza:

  1. Przejdź do widoku przegubu (bez ulubionego-pivot, ponieważ lista jest pusta)
  2. pójść do jednego z pozostały PivotItem s i wybierz pozycję.
  3. Wybierz ten element jako ulubiony we własnym widoku.
  4. Dotknij przycisku Wstecz i wróć do widoku przestawnego.

Teraz nie będzie ulubionych-pivot, a to po prostu nie jest wystarczająco dobre.

Starałem się usunąć go z Widzialność = „hidden”, ale VS narzeka kontekście danych nie jest właściwie określony (jest).

Jakieś pomysły?

Odpowiedz

3

Dlaczego nie dodawać i nie usuwać dynamicznie kodu PivotItem w odpowiedzi na zdarzenia użytkownika? Użytkownik dodaje ulubione -> utwórz i dodaj element przestawny. Użytkownik usuwa swój ostatni ulubiony przedmiot -> usuń element Pivot.

+0

Tha Byłby to dobry pomysł, ale pozycja przestawna jest nieco trudna do odtworzenia (przynajmniej wymagałoby to nieuzasadnionej ilości kodu) w kodzie źródłowym. Sądzę, że mógłbym go usunąć, zachować i przywrócić w późniejszym czasie. –

+1

Możesz usunąć go natychmiast po wywołaniu 'InitializeComponent'. W ten sposób użytkownik nie powinien tego zauważyć. Inną możliwością byłoby utworzenie interfejsu użytkownika XAML dla elementu przestawnego w sekcji "Zasoby" i pobranie go z tego miejsca. –

+0

Prawda. Ale nie ma sposobu, aby "ukryć" go, zamiast dynamicznie dodawać i usuwać? –

0

Przypuszczam, że masz listę ulubionych w tym elemencie przestawnym, więc moim podejściem byłoby powiązanie widoczności elementu przestawnego z właściwością isEmpty na liście.

Na przykład, widok byłby

<PivotItem 
    Visibility="{Binding IsNotEmpty, 
    Converter={StaticResource VisibilityConverter}}"/> 

i viewmodel

ICollectionView ItemsSource; 
... 
public bool IsNotEmpty(){  
    return !ItemsSource.IsEmpty; 
} 

i wreszcie, konwerter

public class BooleanToVisibilityConverter : IValueConverter { 

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    if(value == null) 
     return Visibility.Collapsed; 
    var isVisible = (bool)value; 
    return isVisible ? Visibility.Visible : Visibility.Collapsed; 
} 
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    var visiblity = (Visibility)value; 
    return visiblity == Visibility.Visible; 
}} 

Converter uzyskane z Useful Converters

+0

Niestety, jak wspomniałem w moim oryginalnym pytaniu, to właśnie próbowałem zrobić na początku. To nie działa. Dziękuję za poświęcony czas na napisanie bardzo przyzwoitej odpowiedzi. –

+0

Czy mógłbyś dodać więcej informacji o błędzie, który wizualne studio daje ci o kontekście danych? – Berni

+0

moja wina - okazało się, że to ReSharper zdecydował się podkreślić coś, czego nie powinien mieć. –

Powiązane problemy