Ist das sicher?
Kurz gesagt, ja es ist sicher - wie Sie eine FallbackValue
haben, wenn die Bindung fehlschlägt.
Sie könnten eine gute ol verwenden‘DataTrigger
ich über sie in WPF vergessen hatte (ich habe viel vor kurzem auf WinRT gearbeitet - und sie sind, dass nicht verfügbar)
Dies bindet den Abzug der Length
Ihrer , und dann, wenn die Bedingung erfüllt ist - stellen Sie die IsEnabled
Eigenschaft der Schaltfläche (in diesem Fall) false
.
<Button Content="Press Me">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding MyArray.Length}" Value="0">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
Binden an ein bool
auf Ihrem Ansichtsmodell
Sie auch eine public bool
Property auf Ihrem Ansichtsmodell verwenden könnte, und stützen dann IsEnabled
dazu:
public bool IsEnabled { get { return MyArray.Length > 0; } }
und in Ihrem Xaml:
Verwenden Sie eine IValueConverter
beste Option für alle mit WinRT
Sie könnten auch ein Converter
erstellen und verwenden, die ein boolean
zurück auf der Grundlage der Bedingung geben Sie nach.
Siehe http://wpftutorial.net/ValueConverters.html für ein großes Tutorial zum Implementieren von Konvertern in Ihrem WPF.
A-Wandler implementiert IValueConverter
, und so etwas wie folgt aussehen:
public class BoolToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
// Do the conversion from bool to visibility
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
// Do the conversion from visibility to bool
}
}
Vergessen Sie nicht, es in Ihrem Benutzersteuerung/Ansicht zu verweisen - oder sogar in Ihrem App.xaml
, um es als ein StaticResource
zu verwenden .
Beispiele?
Sie können Ihren eigenen Konverter beliebig nach Ihren eigenen Vorstellungen interpretieren, basierend auf Ihrer eigenen Logik.
In diesem Fall ist ein Konverter schaffen könnte, und es in der XAML verwenden, etwa so:
Sie eine ArrayNotNullOrEmptyToBooleanConverter
schaffen könnte, und es in Ihrem XAML verwenden wie so:
<Button
Content="Press Me"
IsEnabled="{Binding MyArray, Converter={Binding ArrayNotNullOrEmptyToBooleanConverter}}">
</Button>
Or schaffen nur einfach eine IsGreaterThanZeroToBooleanConverter
und verwenden Sie dann in Ihrem XAML, etwa so:
<Button
Content="Press Me"
IsEnabled="{Binding MyArray.Length, Converter={Binding IsGreaterThanZeroToBooleanConverter}}">
</Button>
hoffe, das hilft! :)
gerade tun es WO rks bedeutet, dass IsEnabled auf "false" gesetzt ist, wenn das Array leer ist? Besser einen Bindungskonverter verwenden. – Clemens
Stimmen Sie überein, verwenden Sie 'IValueConverter' oder lassen Sie eine Eigenschaft auf dem ViewModel basierend auf der Länge Ihres Arrays boolesch zurückkehren. – Michael