如何使用开关隐藏一个网格并显示另一个?

时间:2017-09-06 15:58:25

标签: xamarin xamarin.forms

到目前为止我有这个代码:

<ViewCell>
   <Grid>
      <Label Text="Custom Scores" />
      <Switch IsToggled="{Binding ShowPointsSwitch}" />
   </Grid>
</ViewCell>
<ViewCell Tapped="openPicker">
   <Grid IsVisible="{Binding ShowPointsSwitch}">
      <Label Text="ABC" />
   </Grid>
   <Grid IsVisible="{Binding ShowPointsSwitch, Converter={StaticResource InverseBoolConverter} }">
      <Label Text="DEF" />
   </Grid>
</ViewCell>

我要做的是让开关隐藏并显示不同的网格,但它不起作用。所有发生的事情是它显示一个标签,然后当移动开关时它什么也没显示。

有人可以就如何解决这个问题向我提出建议。以供参考。这是我的ViewModel:

    bool showPointsSwitch;

    public bool ShowPointsSwitch
    {
        get
        {
            return showPointsSwitch;
        }
        set
        {
            if (value != showPointsSwitch)
            {
                showPointsSwitch = value;
                NotifyPropertyChanged("ShowPointsSwitch");
            }
        }
    }

这是转换器:

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

2 个答案:

答案 0 :(得分:1)

那基本上是因为ViewCell应该只有一个孩子。 尝试使用:

<ViewCell Tapped="openPicker">
  <Grid>
    <Label Text="ABC" IsVisible="{Binding ShowPointsSwitch}" />  
    <Label Text="DEF" IsVisible="{Binding ShowPointsSwitch, Converter={StaticResource InverseBoolConverter} }" />
  </Grid>
</ViewCell>

或者,

<ViewCell Tapped="openPicker">
  <Grid>
    <Grid IsVisible="{Binding ShowPointsSwitch}">
      <Label Text="ABC" />
    </Grid>
    <Grid IsVisible="{Binding ShowPointsSwitch, Converter={StaticResource InverseBoolConverter}}">
      <Label Text="DEF" />
    </Grid>
  </Grid>    
</ViewCell>

答案 1 :(得分:0)

您可以尝试使用

代替转换器
{Binding !ShowPointsSwitch}