在ListView中执行命令SwitchCell OnChanged

时间:2017-06-07 10:51:39

标签: c# listview xamarin.forms switch-statement

我对Xamarin.Forms相当新,并尝试用谷歌搜索我的问题。 我有一个SwitchCells的ListView,ItemsSource是一个简单的Data-Class的集合。 现在,当我在SwitchCell中更改Switch的状态时,我希望调用一个Method ...这不应该是问题,但我无法弄清楚我是如何知道SwitchCell的,或者换句话说,我知道DataClass的实例,物品被切换了。 我希望它类似于我评论的代码,但我真的不确定......我也认为我在这里混合了命令和方法....

我的XAML:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="slwAppTutorial.InterestsList">
  <StackLayout>
    <ListView x:Name="interestList">
      <ListView.ItemTemplate>
        <DataTemplate>
          <SwitchCell Text="{Binding Text}" On="false" > <!--OnChanged="{Binding something}" -->
          </SwitchCell>
        </DataTemplate>
      </ListView.ItemTemplate>
    </ListView>
    <Button x:Name="submit" Text="Bestätigen"></Button>
  </StackLayout>
</ContentPage>

我的CodeBehind文件:

namespace slwAppTutorial
{
public partial class InterestsList : ContentPage
{
    //InterestListManager manager;
    List<InterestsItem> myList = new List<InterestsItem>();

    public InterestsList()
    {

        InitializeComponent();

        InterestsItem myInterest = new InterestsItem() { Id = "1234", Text = "Volleyball", Kind = "Sport" };
        for (int i=0; i < 25; i++) { myList.Add(myInterest); }
        //manager = InterestListManager.DefaultManager;

// My Expected Command
// someSwitch.OnChanged+= (sender, args) =>
//            {
//                var selectedItem = args.Item as InterestsItem;
//
//                Do something with my InterestsItem
//
//                DisplayAlert(title: selectedItem.Text, message: selectedItem.Kind, cancel: "OK");
//                if (selectedItem == null) return;
//            };

    protected override async void OnAppearing()
    {
        base.OnAppearing();
        interestList.ItemsSource = myList;
        //await RefreshItems(true, syncItems: false);
    }

    private async Task RefreshItems(bool showActivityIndicator, bool syncItems)
    {
        interestList.ItemsSource = myList; //await manager.GetInterestItemsAsync(syncItems);
    }


}
}

如果我的问题有任何问题,请告诉我,我会尝试更改或提供更多信息

2 个答案:

答案 0 :(得分:1)

使用完整数据绑定有更好的方法。

但是如果您想使用现在的代码实现它,那么您要查找的值是sender参数。 sender的类型为SwitchCell,因此请将其转换为BindingContext。最后的活动将如下所示:

private void Handle_OnChanged(object sender, ToggledEventArgs args)
{
    var selectedItem = ((SwitchCell)sender).BindingContext as Foo;

    DisplayAlert(title: selectedItem.Text, message: selectedItem.Bar.ToString(), cancel: "OK");                
}

可以找到类似于您的代码的示例项目here

答案 1 :(得分:0)

我认为你应该使用Switch而不是SwitchCell

SwitchIsToggledProperty

Toggled事件