【发布时间】:2017-01-23 05:45:22
【问题描述】:
这是场景:
带有条目的 XAML 有一个链接到 textchanged 事件的方法。
在将 UI 组件(本例中为网格)封装在类中以提高代码的可维护性后,我发现了下一个问题:
我无法将方法的事件链接到网格上的特定按钮。问题是我正在调用这个方法(它有一个不能在简单类中调用的 DisplayActionSheet 函数。它应该来自任何类型的 Page 类或 Application 类)。
所以我的第一个方法是将按钮封装在另一个类中。 我在页面中创建了这个对象(按钮),链接到方法的事件(也在页面中编码。现在我可以,在页面的类中)并将这个对象传递给网格对象构造函数的新实例(另一堂课)。最后,我将网格(带有正确链接到其中的按钮)添加到页面。
好吧,我担心这不是一个好主意。我假设这可能源于“内存泄漏问题”(与删除内存中的对象相关的问题,并且这些对象在组成它们的不同类之间有引用,不是吗?),只是在不同的类(网格、按钮和页面)。
在研究解决方案后,似乎要委托此方法的事件。
但我无法实现它,这很容易(当你知道的时候),但这些例子不是我的案例准备的(或者我找不到它)。你能帮忙吗? :)
我发布了代码的想法,它是通过 ListView 内部的 Button 实现的,在网格内部(有点复杂,但我想简化它)。
//This code is called in CarouselPage
// ..............
//ButtonEstadoTarea is type Button
ButtonEstadoTarea bet = new ButtonEstadoTarea();
//OnStartClicked is allocated is this CarouselPage
//
bet.Clicked += this.OnStartClicked;
ListViewIntervencion lvi = new ListViewIntervencion();
lvi.ItemTapped += this.OnItemTapped;
lvi.ItemsSource = intervencion.Interv;
GridCabeceraIntervencion gci = new GridCabeceraIntervencion(intervencion, lvi);
var intervencionContent = new ContentPage
{
Content = gci,
};
this.Children.Add(intervencionContent);
async void OnStartClicked(object sender, EventArgs args)
{
var action = await DisplayActionSheet("Procesar Tarea", null, "Cancel", "Iniciar", "Pausar", "Bloquear", "Terminar");
// MORE MAGIC...
}
谢谢大家。
【问题讨论】:
标签: c# xamarin delegates xamarin.forms delegation