2017-09-06 59 views
0

我有我的XAML页面上的开关和一个标签:如何通过绑定ViewModel链接开关和可视属性?

<Switch x:Name="CpSwitch" Toggled="CpSwitch" /> 

<ViewCell x:Name="aBtn" Tapped="openPicker"> 
    <Grid VerticalOptions="CenterAndExpand" Padding="20, 0"> 
     <Label Text="Don't Know" /> 
     <Picker x:Name="aBtnPicker" SelectedIndexChanged="aBtnPickerSelectedIndexChanged" ItemsSource="{Binding Points}"> 
     </Picker> 
     <Label Text="{Binding ABtnLabel}"/> 
    </Grid> 
</ViewCell> 

我的视图模型

public class SettingsViewModel: ObservableProperty 
{ 
    public SettingsViewModel() 
    { 
    } 

我想要做的是使用视图模型,并在该视图模型有切换状态或者使ViewCell可见或不可见。

有人可以给我一些建议,关于如何使用ViewModel绑定ViewCell的开关和visible属性。

回答

1

基本上你将它们绑定到你的视图模型中相同的Boolean变量。

<Switch IsToggled="{Binding ShowViewCell}" /> 

<ViewCell IsVisible="{Binding ShowViewCell}"> 
    ... 
</ViewCell> 

并在您的视图模型:

public class SettingsViewModel 
{ 
    public bool ShowViewCell {get;set;} 
} 

这保证了当开关接通的ViewCell变得可见。如果你想达到相反的,你可以写一个自定义转换器:

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; 
    } 
} 

它添加到您的App.xaml资源字典:

<Application.Resources> 
    <ResourceDictionary> 
     <converters:InverseBoolConverter x:Key="InverseBoolConverter" /> 
    </ResourceDictionary> 
</Application.Resources> 

并应用到ViewCell:

<Switch IsToggled="{Binding ShowViewCell, Converter={StaticResource InverseBoolConverter}}" /> 
+0

难道你不只是在视图模型的构造函数中添加一个'ShowViewCell = true'? – Harry

+0

布尔的默认值为false,所以绝对推荐设置它。 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/default-values-table 可以这样做这虽然 公共BOOL ShowViewCell {获得;组; } = true; – Joagwa

相关问题