Xamarin Forms 元素父属性为 null

nas*_*san 5 c# android xamarin.android xamarin.forms

我有一个ViewCell用作 a 的项目模板ListView

ListView details_list = new ListView ();
details_list.ItemTemplate = new DataTemplate(typeof(CartViewCell));
Run Code Online (Sandbox Code Playgroud)

在 ViewCell 内部,我希望有一个函数来访问 ListView 的 itemSource 以删除项目。我想我会通过访问Parent内部的属性来做到这一点ViewCell

ListView parent = (ListView)this.Parent;
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这样做时,它显示父级为空。这是使用该Parent财产的错误方式吗?我缺少什么?

Jas*_*son 0

有几种方法可以解决这个问题;两种可能性包括

  1. 使用命令

在 ViewModel 中定义一个命令,

// define a command property
public ICommand DeleteCommand { get; set; }

// in your constructor, initialize the command
DeleteCommand = new Command<string>((id) =>
{
  // do the appropriate delete action here
}
Run Code Online (Sandbox Code Playgroud)

然后在你的 ViewCell 中绑定它

<Button Command="{Binding DeleteCommand}" CommandParameter="{Binding ID}" Text="Delete" />
Run Code Online (Sandbox Code Playgroud)
  1. 使用消息传递

在您的 ViewModel 中,订阅一条消息:

MessagingCenter.Subscribe<MyViewCell, string> (this, "Delete", (sender, id) => {
    // do the appropriate delete action here
});
Run Code Online (Sandbox Code Playgroud)

在您的 ViewCell 中,每当他们单击按钮(或触发操作的任何内容)时发送消息 - ID 应该是特定项目的标识符

MessagingCenter.Send<MyViewCell, string> (this, "Delete", ID);
Run Code Online (Sandbox Code Playgroud)