Wiem, że mogę utworzyć metodę ustawiającą, która sprawdza, czy wartość jest równa NULL i coś zrobić. Przykład:
<TextBlock>
<TextBlock.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding SomeField}" Value="{x:Null}">
<Setter Property="TextBlock.Text" Value="It's NULL Baby!" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
Ale jak mogę sprawdzić, czy występuje wartość „nie” ... na przykład „NIE NULL” lub „NIE = 3”? Czy to możliwe w XAML?
Wyniki: Dziękuję za odpowiedzi ... Wiedziałem, że mogę zrobić konwerter wartości (co oznacza, że będę musiał wprowadzić kod, a to nie będzie czysty XAML, jak się spodziewałem). Jednak to odpowiada na pytanie, że w rzeczywistości „nie”, nie można tego zrobić w czystym XAML. Wybrana odpowiedź wskazuje jednak prawdopodobnie najlepszy sposób na stworzenie takiej funkcjonalności. Dobre znalezisko.
źródło
Możesz do tego użyć IValueConverter:
Gdzie IsNullConverter jest zdefiniowany w innym miejscu (a conv jest ustawiony tak, aby odwoływał się do swojej przestrzeni nazw):
Bardziej ogólnym rozwiązaniem byłoby zaimplementowanie IValueConverter, który sprawdza równość z parametrem ConverterParameter, dzięki czemu można sprawdzić wszystko, a nie tylko wartość null.
źródło
To trochę oszustwo, ale po prostu ustawiam domyślny styl, a następnie zastępuję go za pomocą DataTrigger, jeśli wartość jest zerowa ...
źródło
Porównaj z null (jak powiedział Michael Noonan):
Porównaj z not null (bez konwertera):
źródło
Używam tego, aby włączyć przycisk tylko wtedy, gdy wybrany jest element widoku listy (tj. Nie jest pusty):
źródło
Możesz użyć
DataTrigger
klasy w Microsoft.Expression.Interactions.dll, które są dostarczane z Expression Blend .Przykład kodu:
Korzystając z tej metody, możesz wywołać przeciw
GreaterThan
iLessThan
również. Aby użyć tego kodu, należy odwołać się do dwóch bibliotek dll:źródło
Właśnie użyłem tu odwrotnej logiki ... ustawiając mój stackpanel na niewidoczny, gdy mój comboitem nie jest zapełniony, działa całkiem nieźle!
źródło
Zatrzymać! Bez konwertera! Nie chcę "sprzedawać" biblioteki tego gościa, ale nienawidziłem faktu robienia konwertera za każdym razem, gdy chciałem porównać rzeczy w XAML.
Więc z tą biblioteką: https://github.com/Alex141/CalcBinding
możesz to zrobić [i dużo więcej]:
Po pierwsze, w deklaracji windows / userControl:
następnie w bloku tekstowym
Magiczną częścią jest konw .: Binding „MYValue == null” . W rzeczywistości możesz ustawić dowolny warunek, jaki chcesz [spójrz na dokument].
zauważ, że nie jestem fanem osób trzecich. ale ta biblioteka jest darmowa i ma niewielki wpływ (wystarczy dodać 2 pliki .dll do projektu).
źródło
Moje rozwiązanie znajduje się w wystąpieniu DataContext (lub ViewModel, jeśli używasz MVVM). Dodaję właściwość, która zwraca wartość true, jeśli spełniony jest warunek Not Null, którego chcę.
i powiąż DataTrigger z powyższą właściwością. Uwaga: w VB.NET pamiętaj, aby użyć operatora If i NOT funkcji IIf, która nie działa z obiektami Null. Wtedy XAML to:
źródło
Jeśli szukasz rozwiązania nie wykorzystującego IValueConverter, zawsze możesz skorzystać z poniższego mechanizmu
źródło
Przetwornik:
Wiążący:
źródło
Możesz użyć konwertera lub utworzyć nową właściwość w swoim ViewModel w następujący sposób:
i użyj go:
źródło