使用拨动开关将标签的可见属性绑定到列表中

时间:2019-01-09 06:21:14

标签: c# listview xamarin mvvm

我有一个切换按钮和包含标签的列表。 Toggle(Switch)和List View在Xaml文件中声明,其中list的数据单元以编程方式在cs文件中生成。 我需要根据切换开关在列表中隐藏/显示此标签

Xaml代码:

<Switch  IsToggled="{Binding IsToggled, Mode=TwoWay}" Grid.Row = "0" Grid.Column = "1" HorizontalOptions = "Start" Margin = "10,8,8,0"></Switch>

<ListView x:Name="lvItemSigns" HasUnevenRows="True" SeparatorVisibility="Default" SeparatorColor="Gray">

cs文件代码:

lvItemSigns.ItemTemplate = new DataTemplate(typeof(DataCell)); lvItemSigns.ItemsSource = VM.ItemSignsList;

class DataCell : ViewCell
{
   Label label;
   public DataCell()
   {
     // has grid
      var label = new Label();
            label.TextColor = Color.Black;
            label.Margin = 4;
            label.Text = "test";
            grid.Children.Add(label, 2, 1);
            label.SetBinding(Label.IsVisibleProperty, new Binding("BindingContext.IsToggled", BindingMode.TwoWay, new BooleanConverter(), null, null, "cs-file_name"));

 grid.Children.Add(stackLayout, 0, 3);

            grid.Margin = new Thickness(8,0,0,0);
            View = grid;
   }
}

在ViewModel中:

    public bool _IsToggled;
    public bool IsToggled
    {
        get
        {
            return _IsToggled;
        }
        set
        {
            _IsToggled= value;
            OnPropertyChanged("_IsToggled");
        }
    }
public ItemSignsTabViewModel()
{
  ItemSignsList = new ObservableCollection<TicketItem>(daItemSign.GetItemSigns(Ticket.MobileID));
}

我将visible属性绑定到Label,但是仍然可以始终看到标签(当拨动开关打开或关闭时)。

我知道我做错了。有帮助吗?

1 个答案:

答案 0 :(得分:1)

您用于Switch绑定的DataContext与您的DataCell的DataContext不同。

两个视图都没有针对相同的对象。 您需要同时为页面和DataCell发布视图模型的代码,以获取帮助。