Ho un ViewCell personalizzato con un pulsante. Quando clicco su questo pulsante mi piacerebbe gestire questo clic nella pagina di contenuto che visualizza il ListView con ViewCells. In iOS, lo farei con un delegato della cella. Come lo farei in C#/Xamarin.Forms?Pulsante Xamarin.Forms in ViewCell. Come gestire l'evento?
Questa è mia abitudine 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;
}
E il mio ContentPage che sta usando questo come un ViewCell assomiglia a questo:
ListView.ItemTemplate = new DataTemplate (typeof(CustomCell));
Allora, come faccio a prendere il pulsante di stampa?
Si prega di chiedere se avete bisogno di chiarimenti.
Ok, quindi ho ottenuto questo fino atleast:
Questo è il mio 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());
}
E questo è il mio cellulare:
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);
}
}
Quindi, tutto ciò che è lasciato ora serve per ottenere l'oggetto reale associato alla cella. In ItemSelected per ListView, è fatto così:
ListView.ItemSelected += async (object sender, SelectedItemChangedEventArgs e) => {
var obj = (HSObject)e.SelectedItem;
};
Come posso fare qualcosa di simile?
Trovato! Questo forse non è una buona soluzione, ma sembra funzionare:
void CustomCellButtonClicked (CustomCell m, EventArgs e)
{
var myObject = m.BindingContext;
}
Accetterò l'unica risposta a causa del fatto che mi ha spinto nella direzione giusta. (E che probabilmente è un modo migliore per farlo).
Sto cercando una soluzione anche a questo, e guardandomi attorno sembra che non sia possibile. L'oggetto della cella di base non ha accesso all'oggetto della pagina, quindi non ha accesso ad alcuni eventi come il foglio di azione e la navigazione. Che evento stai cercando di gestire? – jcc