web-dev-qa-db-ja.com

Xamarin Forms-ブールバインディング値を無効にする

私はxamarinフォームとmvvmパターンを学んでいます。バインドbool値を無効にすることが可能かどうか疑問に思っています。私が意味するのは:

私は、isVisible Bindingを使用したエントリがあるとします。

<Entry
    x:Name="TextEntry"
    IsVisible="{Binding IsVisibleEntry}"
/>

Labelが表示されているときに非表示にするTextEntry

<Label x:Name="MainLabel" 
       isVisible="!{Binding IsVisibleEntry}"/> //ofc it is not working

ViewModelでMainLabelの新しい変数を作成せずに行うことは可能ですか?

14
Grzegorz G.

オプション1:コンバーター

public class InverseBoolConverter : IValueConverter, IMarkupExtension
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return !((bool)value);
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value;
            //throw new NotImplementedException();
        }


        public object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }

XAML

<Label x:Name="MainLabel" 
       isVisible="{Binding IsVisibleEntry, Converter={Helpers:InverseBoolConverter}}"/>

XAMLヘッダー

xmlns:Helpers="clr-namespace:HikePOS.Helpers"

オプション2:トリガー

<Label x:Name="MainLabel" isVisible="{Binding IsVisibleEntry}">
    <Label.Triggers>
        <DataTrigger TargetType="Label" Binding="{Binding IsVisibleEntry}" Value="True">
            <Setter Property="IsVisible" Value="False" />
        </DataTrigger>
    </Label.Triggers>
</Label>
33
Ziyad Godil

バインディングが次のようになるように、反転コンバーターを作成する必要があります。

public class InverseBoolConverter : IValueConverter
{
    public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return !(bool)value;
    }
    public object ConvertBack (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return !(bool)value;
    }
}

XAMLで

<local:InverseBoolConverter x:Key="inverter"/>
<Entry
x:Name="TextEntry"
IsVisible="{Binding IsVisibleEntry, Converter={StaticResource inverter}}"
/>
7
praty