Xamarin表单按钮命令绑定在ListView中

我有以下问题,在我看来我有一个Listview。 在这个列表视图中,我想有两个按钮。 一个用于编辑项目,一个用于删除它。

这是我在XAML中的列表视图

                        

在我的ViewModel中是我需要的一切,我使用不在listview中的按钮测试了命令,它完美无缺。

如果我将鼠标hover在绑定上,则会显示消息“无法解析符号’…’”

无法解析符号

一月,

由于您已使用列表视图并且您的命令位于DataTemplate内,因此绑定将附加到ItemSource中每个单独模型的绑定上下文。

解决这个问题的方法是做以下事情:

                         

因此,您设置绑定源以引用列表视图的绑定上下文(即您的视图模型或“ArbeitsEinträgeList”。您还可以将命令参数设置为每个单独项的绑定上下文。如您所见,我有x:网格上的Name =“Item”和CommandParameter =“{Binding Source = {x:Reference Item},Path = BindingContext}”。

简单地说,声明这样的命令允许您在视图模型中定义一个通用命令,并且在命令参数执行命令时,该命令参数是单个项的绑定上下文。

  public ICommand DeleteEintragCommand { get { return new Command((e) => { var item = (e as MyModelObject); // delete logic on item }); } } 

那是因为你绑定到你的EintragList一个项 – 属性(这就是你绑定到文本属性如BeginnEnde )。 命令绑定尝试从列表中的单个项目中获取命令,而不是从您的viewmodel中。

选项1:您在项目类中设置命令并在那里处理点击。

选项2:告诉您的绑定源应该是您的页面(而不是单个项目):

 Command="{Binding BindingContext.EditEintragCommand, Source={x:Reference Name=MyPageName}}" 

请确保您的页面根元素的x:Name="MyPageName"设置为x:Name="MyPageName"

要知道哪个项触发了命令,您可以设置CommandParameter属性,然后将其作为对象发送到命令:

 CommandParameter="{Binding .}" 

另外:当您使用外部模板显示列表中的项目时,您可以尝试我在另一个答案中描述的内容 (相同的原则)。

如果你想绑定Button click,你也可以尝试在Button属性中使用Clicked事件这是我的代码,它对我有用

               

和代码方面你可以简单地用类似的参数实现delete方法

  public void Delete(Object Sender, EventArgs args) { Button button = (Button)Sender; string ID = button.CommandParameter.ToString(); // Do your Stuff..... }