2017-09-20 74 views
2

我正在學習xamarin格式和mvvm模式。我想知道,如果有可能否定綁定布爾值。我的意思是:Xamarin Forms - 取消布爾綁定值

我有,比方說進入與ISVISIBLE綁定:

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

Label我想隱藏的時候TextEntry可見。

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

有沒有可能在ViewModel中爲MainLabel創建一個新變量?

回答

10

你有兩個選擇,讓您的解決方案 1)使用轉換器。 2)使用觸發器。

轉換

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}}"/> 

不要忘了這條線在頭

的xmlns:助手=「CLR的命名空間:HikePOS。幫手「

觸發

<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> 
+0

非常感謝。 :) –

5

您將需要創建一個反向轉換器讓你的結合看起來有點像這樣:

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}}" 
/> 
+0

有幾次我都細腰幾個小時試圖得到這個工作,我從來沒有。我總是得到'Type core:InverseBoolConverter not found in xmlns Igs.Mobile.Core'或者等同於我命名的東西。 – JonathanPeel