我对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);
}
}
}
如果我的问题有任何问题,请告诉我,我会尝试更改或提供更多信息
答案 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)