Przejdź do głównej zawartości

Okno do pracy z grupą elementów i ich ilością

W wersji API V7Preview6 dodano nowe okno, które ułatwia pracę z ilością grupy elementów
IViewManager.ShowQuantityChangerPopup.

quantity-changer-popup-1

Metoda przyjmuje

  • string title — tytuł okna,
  • string text — tekst z opisem,
  • int minimalQuantity — minimalna łączna możliwa liczba dla grupy,
  • int maximalQuantity — maksymalna łączna możliwa liczba dla grupy,
  • IReadOnlyCollection<(string name, int quantity, int minimalQuantity, int maximalQuantity)> items — sama lista elementów.

Każdy element to

  • string name — jego nazwa,
  • int quantity — aktualna ilość elementu,
  • int minimalQuantity — minimalna możliwa liczba elementu,
  • int maximalQuantity — maksymalna możliwa liczba elementu.

W rezultacie metoda zwraca listę IReadOnlyCollection<int>, która zawiera liczbę każdego elementu w kolejności odpowiadającej kolejności w otrzymanym argumencie items.

Przyciski + i - pozwalają zwiększyć lub zmniejszyć liczbę elementów o jeden.
Centralny obszar elementu z jego nazwą jest również klikalny i pozwala otworzyć cyfrowe okno popup do zaawansowanej edycji ilości wybranego elementu.
Po prawej stronie nazwy znajduje się aktualna ilość elementu.

quantity-changer-popup-3

W przypadku, gdy minimalna możliwa ilość każdego elementu wynosi zero,
maksymalna możliwa ilość każdego elementu jest równa maksymalnej możliwej ilości dla grupy,
aktualna ilość jednego z elementów jest równa maksymalnej możliwej ilości dla grupy,
a aktualna liczba pozostałych elementów wynosi zero,
kliknięcie na centralny obszar pozostałych elementów nie otwiera cyfrowego popupu,
a całkowicie przenosi ilość wcześniej wybranego elementu do aktualnego elementu.

quantity-changer-popup-2

Przykład
private static void ShowListWithQuantitiesPopup(IViewManager viewManager)
{
const string title = "Prezent od Świętego Mikołaja";
const string hintText = "Wybierz słodycze";
var list = new List<(string name, int quantity, int minimalQuantity, int maximalQuantity)>
{
("Czekolada", 0, 0, 3),
("Mandarynki", 0, 0, 3),
("Cukierki", 0, 0, 3),
("Wafle", 0, 0, 3),
("Herbatniki", 0, 0, 3),
("Pianki", 0, 0, 3),
("Bezy", 0, 0, 3),
};

var inputResult = viewManager.ShowQuantityChangerPopup(title, hintText, 3, 3, list);
ShowNotification(inputResult == null
? "Nic"
: $"Wybrane : {string.Join(", ", inputResult.Zip(list, (quantity, item) => (name: item.name, quantity: quantity)).Where(i => i.quantity != 0).Select(i => $"{i.quantity} × {i.name}"))}",
TimeSpan.FromSeconds(10));
}