Mam sytuację, w której muszę pokazać wartość całkowitą, powiązaną z właściwością w moim kontekście danych, po przeprowadzeniu dwóch oddzielnych konwersji:
- Odwróć wartość w zakresie (np. Zakres wynosi od 1 do 100; wartość w kontekście danych to 90; użytkownik widzi wartość 10)
- przekonwertuj liczbę na ciąg
Zdaję sobie sprawę, że mógłbym wykonać oba kroki, tworząc własny konwerter (który implementuje IValueConverter). Jednak mam już osobny konwerter wartości, który wykonuje tylko pierwszy krok, a drugi krok jest objęty przez Int32Converter.
Czy istnieje sposób, aby połączyć te dwie istniejące klasy w XAML bez konieczności tworzenia kolejnej klasy, która je agreguje?
Jeśli muszę coś z tego wyjaśnić, daj mi znać. :)
Dzięki.
wpf
data-binding
xaml
ivalueconverter
Mal Ross
źródło
źródło
return this.Reverse<IValueConverter>().Aggregate(value, (current, converter) => converter.ConvertBack(current, targetType, parameter, culture));
Znalazłem dokładnie to, czego szukałem, dzięki uprzejmości Josha Smitha: Piping Value Converters (link do archive.org) .
Definiuje
ValueConverterGroup
klasę, której użycie w XAML jest dokładnie takie, na jakie liczyłem. Oto przykład:Świetne rzeczy. Dzięki, Josh. :)
źródło
Realizacja miasteczka z projektu Garetha Evansa Silverlight jest wielka, jednak nie obsługuje różne parametry konwertera.
Zmodyfikowałem go, abyś mógł podać parametry rozdzielane przecinkami (chyba że je unikniesz).
Przetwornik:
Uwaga: ConvertBack nie jest tutaj zaimplementowany, zobacz moją Gist dla pełnej wersji.
Realizacja:
źródło
Tak, są sposoby na łańcuchowe konwertery, ale nie wygląda to ładnie i nie potrzebujesz tego tutaj. Jeśli kiedykolwiek będziesz tego potrzebować, zadaj sobie pytanie, czy to naprawdę właściwa droga? Prosty zawsze działa lepiej, nawet jeśli musisz napisać własny konwerter.
W twoim konkretnym przypadku wszystko, co musisz zrobić, to sformatować przekonwertowaną wartość na ciąg.
StringFormat
nieruchomość na aBinding
jest tutaj twoim przyjacielem.źródło
Oto małe rozszerzenie odpowiedzi Town na obsługę wielu wiązań:
źródło