xaml - How can i capture the event of a tapped item (located in a template) from the base class? -
i have base grid
<grid grid.row="1" grid.column="1" x:name="gridname"> <stacklayout orientation="vertical"> <art:gridoptionsview itemssource="{binding items}" > <art:gridoptionsview.itemtemplate> <datatemplate> <uikit:dashboarditemtemplate /> </datatemplate> </art:gridoptionsview.itemtemplate> </art:gridoptionsview> </stacklayout> </grid> which uses following dashboarditemtemplate
<?xml version="1.0" encoding="utf-8"?> <contentview xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" backgroundcolor="white"> <contentview.content> <grid padding="0"> <stacklayout verticaloptions="center" horizontaloptions="center" orientation="vertical" spacing="10"> <grid> <label text="" style="{staticresource fonticon}" horizontaltextalignment="center" opacity="1" fontsize="130" textcolor="{binding backgroundcolor}" verticaloptions="center" horizontaloptions="center" isvisible="{binding source={x:reference root}, path=showiconcoloredcirclebackground}" /> <label text="{binding icon}" style="{staticresource fonticon}" opacity="1" textcolor="white" verticaloptions="center" horizontaloptions="center" /> </grid> <label text="{binding name}" textcolor="{binding source={x:reference root}, path=textcolor}" fontsize="14" horizontaltextalignment="center"> </label> </stacklayout> </grid> </contentview.content> <contentview.gesturerecognizers> <tapgesturerecognizer tapped="onwidgettapped" /> </contentview.gesturerecognizers> </contentview> how can capture "onwidgettapped" event on base xaml class?
i custom bindable property parentbindingcontext in template:
public class mytemplate : contentpage { public static bindableproperty parentbindingcontextproperty = bindableproperty.create(nameof(parentbindingcontext), typeof(object), typeof(basepagetemplate)); public object parentbindingcontext { { return getvalue(parentbindingcontextproperty); } set { setvalue(parentbindingcontextproperty, value); } } } and in page (which contains template) set parentbindingcontext:
<datatemplate> <template:mytemplate parentbindingcontext="{binding bindingcontext, source={x:reference name=mypagename}}" /> </datatemplate> with can access full bindingcontext of page in template. following example of command shows how template can bind command mycommand, in bindingcontext of page:
command="{binding parentbindingcontext.mycommand, source={x:reference name=mytemplatepagename}}" but presupposes page has bindingcontext behind (like viewmodel). viewmodel contains "global" commands whole page. these commands (or methods) can accessed template, because know bindingcontext of page.
Comments
Post a Comment