Ich verwende ein BooleanToVisibilityConverter
in WPF, um die Visibility
Eigenschaft eines Steuerelements an ein zu binden Boolean
. Dies funktioniert gut, aber ich möchte, dass eines der Steuerelemente ausgeblendet wird true
, wenn der Boolesche Wert vorliegt , und zeigt, ob dies der Fall ist false
.
.net
wpf
binding
visibility
Ruben Bartelink
quelle
quelle
Antworten:
Implementieren Sie Ihre eigene Implementierung von IValueConverter. Eine Beispielimplementierung ist bei
http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx
Lassen Sie in Ihrer Convert-Methode die gewünschten Werte anstelle der Standardeinstellungen zurückgeben.
quelle
Anstatt zu invertieren, können Sie dasselbe Ziel erreichen, indem Sie eine generische
IValueConverter
Implementierung verwenden, die einen Booleschen Wert in konfigurierbare Zielwerte für true und false konvertieren kann . Unten ist eine solche Implementierung:Als nächstes unterklassifizieren Sie es, wo
T
istVisibility
:Schließlich können Sie dies
BooleanToVisibilityConverter
oben in XAML verwenden und so konfigurieren, dass es beispielsweiseCollapsed
für true undVisible
für false verwendet wird:Diese Inversion ist nützlich, wenn Sie an eine Boolesche Eigenschaft mit dem Namen "
IsHidden
Gegenteil" binden möchtenIsVisible
.quelle
Visibility
Eigenschaften Ihrer Ansicht nach Modell.und übergeben Sie dann ein wahr oder falsch als ConverterParameter
quelle
else if (value is bool?)
Teil sagt mir ReSharper "Ausdruck ist immer falsch". Außerdem kann derif (flag)
Teil präziser umgeschrieben werden alsreturn flag ? Visibility.Visible : Visibility.Collapsed;
.var nullable = (bool?)value; flag = nullable.GetValueOrDefault();
kann viel kürzer und einfacher gemacht werden:flag = (bool?)value ?? false;
Schreiben Sie Ihre eigenen ist die beste Lösung für jetzt. Hier ist ein Beispiel eines Konverters, der sowohl normal als auch invertiert arbeiten kann. Wenn Sie irgendwelche Probleme damit haben, fragen Sie einfach.
quelle
BooleanToVisibilityConverter
indem Sie den Parameter auf null prüfen:Parameter direction = Parameter.Normal; if (parameter != null) direction = (Parameter)Enum.Parse(typeof(Parameter), (string)parameter);
Es gibt auch das WPF Converters- Projekt auf Codeplex. In ihrer Dokumentation heißt es, dass Sie ihren MapConverter verwenden können , um von der Sichtbarkeitsaufzählung in bool zu konvertieren
quelle
Eine weitere Möglichkeit, den booleschen Wert von ViewModel (IsButtonVisible) mit der Sichtbarkeitseigenschaft xaml Control zu binden. Keine Codierung, keine Konvertierung, nur Styling.
quelle
Oder auf die Art des faulen Mannes, nutzen Sie einfach das, was bereits vorhanden ist, und drehen Sie es um:
quelle
Wenn Sie keinen benutzerdefinierten Konverter schreiben möchten, können Sie dies mithilfe von Datenauslösern lösen:
quelle
Ich habe gerade einen Beitrag dazu geschrieben. Ich habe eine ähnliche Idee verwendet wie Michael Hohlios. Nur habe ich Eigenschaften verwendet, anstatt den "Objektparameter" zu verwenden.
Das Binden der Sichtbarkeit an einen Bool-Wert in WPF
mithilfe von Eigenschaften macht ihn meiner Meinung nach besser lesbar.
quelle
Hier ist eine, die ich geschrieben und viel benutzt habe. Es verwendet einen booleschen Konverterparameter, der angibt, ob der Wert invertiert werden soll oder nicht, und verwendet dann XOR, um die Negation durchzuführen:
Hier ist eine XOR-Wahrheitstabelle als Referenz:
quelle
Ich suchte nach einer allgemeineren Antwort, konnte sie aber nicht finden. Ich habe einen Konverter geschrieben, der anderen helfen könnte.
Es basiert auf der Tatsache, dass wir sechs verschiedene Fälle unterscheiden müssen:
Hier ist meine Implementierung für die ersten 4 Fälle:
Beispiel:
Ich denke, die Parameter sind leicht zu merken.
Hoffe es hilft jemandem.
quelle
Sie können QuickConverter verwenden .
Mit QuickConverter können Sie die Konverterlogik inline mit Ihrer BindingExpression schreiben
Hier ist ein invertierter BooleanToVisibility-Konverter:
Sie können QuickConverter über NuGet hinzufügen. Schauen Sie sich die Dokumentation zur Einrichtung an. Link: https://quickconverter.codeplex.com/
quelle
Schreiben Sie Ihren eigenen Konvertiten.
quelle
Eine einfache Einwegversion, die wie folgt verwendet werden kann:
kann wie folgt implementiert werden:
quelle
Konvertieren Sie alles in alles (Bool, String, Enum usw.):
XAML-Beispiele:
quelle
Anstatt Ihren eigenen Code zu schreiben / neu zu erfinden, sollten Sie CalcBinding verwenden :
CalcBinding ist auch für zahlreiche andere Szenarien sehr nützlich.
quelle
Ich weiß, dass dies veraltet ist, aber Sie müssen nichts erneut implementieren.
Was ich getan habe, war, den Wert auf dem Grundstück wie folgt zu negieren:
....
Und es funktioniert gut!
Vermisse ich etwas
quelle