我有一个带有按钮的自定义ViewCell。当我点击这个按钮时,我希望在显示ViewCells的ContentPage中处理此点击事件。在iOS中,我会使用来自单元格的委托来完成此操作。在C# / Xamarin.Forms中,我应该如何做?
这是我的自定义ViewCell:
public CustomCell ()
{
button = new Button ();
button.Text = "Add";
button.VerticalOptions = LayoutOptions.Center;
button.Clicked += [WHAT DO DO HERE???];
var nameLabel = new Label ();
nameLabel.SetBinding (Label.TextProperty, "name");
nameLabel.HorizontalOptions = LayoutOptions.FillAndExpand;
nameLabel.VerticalOptions = LayoutOptions.Center;
var viewLayout = new StackLayout () {
Padding = new Thickness (10, 0, 10, 0),
Orientation = StackOrientation.Horizontal,
Children = { nameLabel, button }
};
View = viewLayout;
}
我的 ContentPage 使用此 ViewCell 的样子如下:
ListView.ItemTemplate = new DataTemplate (typeof(CustomCell));
那么,我该如何捕捉按钮按下的事件?
如果需要澄清,请提出。
好的,至少我已经做到了这一点:
这是我的 ContentPage:
...
ListView.ItemTemplate = new DataTemplate (() => new CustomCell (CustomCellButtonClicked));
}
void CustomCellButtonClicked (CustomCell m, EventArgs e)
{
//How do I get my associated object here?!
System.Diagnostics.Debug.WriteLine ("Pressed cell " + m.ToString ());
}
这是我的手机:
public EventArgs e = null;
public event ButtonClickEvent ClickListener;
public delegate void ButtonClickEvent (AddCardCell m, EventArgs e);
public CustomCell (ButtonClickEvent Listener)
{
ClickListener += Listener;
customButton = new Button ();
customButton.Text = "Add";
customButton.VerticalOptions = LayoutOptions.Center;
customButton.Clicked += AddButtonClicked;
...
}
void AddButtonClicked (object sender, EventArgs e)
{
if (ClickListener != null) {
ClickListener (this, e);
}
}
所以现在剩下的就是获取与单元格关联的实际对象。在 ListView 的 ItemSelected 中,可以像这样完成:
ListView.ItemSelected += async (object sender, SelectedItemChangedEventArgs e) => {
var obj = (HSObject)e.SelectedItem;
};
我该如何做类似这样的事情?
明白了!这也许不是一个好的解决方案,但它似乎可以工作:
void CustomCellButtonClicked (CustomCell m, EventArgs e)
{
var myObject = m.BindingContext;
}
我会接受唯一的答案,因为它把我推向了正确的方向。(而且这可能是更好的方法)。