Ich weiß, dass ich einen Setter erstellen kann, der prüft, ob ein Wert NULL ist, und etwas tun kann. Beispiel:
<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>
Aber wie kann ich nach einem "nicht" -Wert suchen ... wie in "NOT NULL" oder "NOT = 3"? Ist das in XAML möglich?
Ergebnisse: Vielen Dank für Ihre Antworten ... Ich wusste, dass ich einen Wertekonverter ausführen kann (was bedeutet, dass ich Code eingeben muss, und das wäre keine reine XAML, wie ich es mir erhofft habe). Dies beantwortet jedoch die Frage, dass Sie dies in reinem XAML nicht mit "Nein" tun können. Die ausgewählte Antwort zeigt jedoch wahrscheinlich den besten Weg, um diese Art von Funktionalität zu erstellen . Guter Fund.
quelle
Sie können hierfür einen IValueConverter verwenden:
Wo IsNullConverter an anderer Stelle definiert ist (und conv so eingestellt ist, dass es auf seinen Namespace verweist):
Eine allgemeinere Lösung wäre die Implementierung eines IValueConverter, der die Gleichheit mit dem ConverterParameter überprüft, sodass Sie gegen alles und nicht nur gegen Null prüfen können.
quelle
Dies ist ein kleiner Cheat, aber ich habe nur einen Standardstil festgelegt und ihn dann mit einem DataTrigger überschrieben, wenn der Wert null ist ...
quelle
Vergleiche mit null (wie Michael Noonan sagte):
Vergleiche mit nicht null (ohne Konverter):
quelle
Ich verwende dies, um eine Schaltfläche nur zu aktivieren, wenn ein Listenansichtselement ausgewählt ist (dh nicht null):
quelle
Sie können eine
DataTrigger
Klasse in Microsoft.Expression.Interactions.dll verwenden , die mit Expression Blend geliefert wird .Codebeispiel:
Mit dieser Methode können Sie auch gegen
GreaterThan
und auslösenLessThan
. Um diesen Code zu verwenden, sollten Sie auf zwei DLLs verweisen:quelle
Ich habe hier nur die inverse Logik verwendet ... mein Stackpanel auf unsichtbar zu setzen, wenn mein Comboitem nicht gefüllt ist, es funktioniert ziemlich gut!
quelle
Halt! Kein Konverter! Ich möchte die Bibliothek dieses Typen nicht "verkaufen", aber ich hasste es, jedes Mal Konverter zu machen, wenn ich Dinge in XAML vergleichen wollte.
Also mit dieser Bibliothek: https://github.com/Alex141/CalcBinding
Sie können das tun [und vieles mehr]:
Erstens: In der Deklaration von windows / userControl:
dann im Textblock
Der magische Teil ist der Conv: Binding 'MYValue == null' . Tatsächlich können Sie jede gewünschte Bedingung festlegen [siehe Dokument].
Beachten Sie, dass ich kein Fan von Dritten bin. Diese Bibliothek ist jedoch kostenlos und hat nur geringe Auswirkungen (fügen Sie einfach 2 DLL zum Projekt hinzu).
quelle
Meine Lösung befindet sich in der DataContext-Instanz (oder in ViewModel, wenn MVVM verwendet wird). Ich füge eine Eigenschaft hinzu, die true zurückgibt, wenn die gewünschte Nicht-Null-Bedingung erfüllt ist.
und binden Sie den DataTrigger an die obige Eigenschaft. Hinweis: Verwenden Sie in VB.NET unbedingt den Operator If und NICHT die IIf-Funktion, die mit Null-Objekten nicht funktioniert. Dann ist die XAML:
quelle
Wenn Sie nach einer Lösung suchen, die IValueConverter nicht verwendet, können Sie immer den folgenden Mechanismus verwenden
quelle
Konverter:
Bindung:
quelle
Sie können einen Konverter verwenden oder eine neue Eigenschaft in Ihrem ViewModel erstellen:
und benutze es:
quelle