Wie binde ich die Sichtbarkeit einer Schaltfläche an einen Bool-Wert in meinem ViewModel?
<Button Height="50" Width="50" Style="{StaticResource MyButtonStyle}"
Command="{Binding SmallDisp}" CommandParameter="{Binding}" Cursor="Hand"
Visibility="{Binding Path=AdvancedFormat}" />
c#
wpf
xaml
data-binding
raym0nd
quelle
quelle
Antworten:
Angenommen, a
AdvancedFormat
istbool
, müssen Sie Folgendes deklarieren und verwendenBooleanToVisibilityConverter
:Beachten Sie die hinzugefügten
Converter={StaticResource BoolToVis}
.Dies ist ein sehr häufiges Muster bei der Arbeit mit MVVM. Theoretisch Sie die Konvertierung selbst auf der Ansichtsmodell Eigenschaft tun könnten (dh macht nur die Eigenschaft , selbst vom Typ
Visibility
) , obwohl ich das nicht tun würde es vorziehen, da jetzt Sie sind Messing mit der Trennung von Bedenken. Die Sichtbarkeit eines Gegenstands sollte wirklich der Ansicht entsprechen.quelle
Es gibt einen dritten Weg, der keinen Konverter oder eine Änderung Ihres Ansichtsmodells erfordert: Verwenden Sie einen Stil:
Ich bevorzuge diese Technik, weil ich sie in vielen Fällen verwende, in denen das, woran ich bin, nicht boolesch ist - z. B. das Anzeigen eines Elements nur, wenn
DataContext
es nicht null ist, oder das Implementieren von Mehrzustandsanzeigen, bei denen unterschiedliche Layouts basierend auf dem angezeigt werden Einstellung einer Aufzählung im Ansichtsmodell.quelle
TextBlock
, derTextWrapping="Wrap"
gegeben wurde. Jetzt ist diese Wrapping-Eigenschaft nicht mehr festgelegt.2-Wege-Konvertierung in c # von Boolesch in Sichtbarkeit
quelle
Im Allgemeinen gibt es zwei Möglichkeiten: eine Konverterklasse oder eine Eigenschaft im Ansichtsmodell, die den Wert im Wesentlichen für Sie konvertiert.
Ich tendiere dazu, den Immobilienansatz zu verwenden, wenn es sich um eine einmalige Konvertierung handelt. Wenn Sie es wiederverwenden möchten, verwenden Sie den Konverter. Unten finden Sie ein Beispiel für den Konverter:
Eine ViewModel-Eigenschaftsmethode überprüft lediglich den booleschen Eigenschaftswert und gibt eine darauf basierende Sichtbarkeit zurück. Stellen Sie sicher, dass Sie INotifyPropertyChanged implementieren, und rufen Sie es in den Eigenschaften Boolean und Visibility auf, um es ordnungsgemäß zu aktualisieren.
quelle
Dies kann auf sehr einfache Weise erreicht werden. 1. Schreiben Sie dies in die Ansicht.
Das Folgende ist die Boolesche Eigenschaft, die den Wert true / false enthält. Das Folgende ist das Code-Snippet. In meinem Beispiel befindet sich diese Eigenschaft in der UserNote-Klasse.
Auf diese Weise erhält die IsHide- Eigenschaft den Wert.
quelle
Im Hinblick auf:
In Ansicht Modell:
Sie müssen ein Ereignis mit geänderter Eigenschaft haben
So verwenden sie Model-View-View-Modell
Da Sie jedoch möchten, dass es an einen Booleschen Wert gebunden ist, benötigen Sie einen Konverter. Eine andere Möglichkeit besteht darin, einen Booleschen Wert außerhalb festzulegen. Wenn Sie auf diese Schaltfläche klicken, setzen Sie die Eigenschaft_advancedFormat auf die gewünschte Sichtbarkeit.
quelle
private Visibility _advancedFormat = Visibility.visible
Das funktioniert gut,UWP
danke.Seit Windows 10 15063 aufwärts
Seit Windows 10 Build 15063 gibt es eine neue Funktion namens "Implizite Sichtbarkeitskonvertierung", die die Sichtbarkeit nativ an den Bool-Wert bindet. Es ist kein Konverter mehr erforderlich.
(Siehe https://social.technet.microsoft.com/wiki/contents/articles/34846.uwp-compiled-binding-windows-10-anniversary-update.aspx#Implicit_Visibility_conversion ).
Mein Code (der voraussetzt, dass MVVM verwendet wird, und auch Vorlage 10):
quelle