私は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の新しい変数を作成せずに行うことは可能ですか?
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;
}
}
<Label x:Name="MainLabel"
isVisible="{Binding IsVisibleEntry, Converter={Helpers:InverseBoolConverter}}"/>
xmlns:Helpers="clr-namespace:HikePOS.Helpers"
<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>
バインディングが次のようになるように、反転コンバーターを作成する必要があります。
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}}"
/>