How can I make a > in a cell with Xamarin.Forms? -
i have application can change order , way cards appear. has ios need similar way settings > contacts > sort order page works.
this shows 2 rows. 1 first, last , other last, first. when user clicks on row acts radio button , tick mark appears @ end of row.
i try , implement functionality not sure start. should viewcell or textcell , how have ideas how implemented this
.
in extension @hankide's answer:
you can create bindable property 'ischecked' while extending 'textcell' or 'viewcell' , bind vm state it.
public class mytextcell : textcell { public static readonly bindableproperty ischeckedproperty = bindableproperty.create( "ischecked", typeof(bool), typeof(mytextcell), defaultvalue: false); public bool ischecked { { return (bool)getvalue(ischeckedproperty); } set { setvalue(ischeckedproperty, value); } } } next step create renderer listens property , shows check-mark @ ios level.
[assembly: exportrenderer(typeof(mytextcell), typeof(sampleapp.ios.myviewcellrenderer))] namespace sampleapp.ios { //if implementing renderer viewcell, use viewcellrenderer bas class public class myviewcellrenderer : textcellrenderer { uitableviewcell _nativecell; public override uitableviewcell getcell(cell item, uitableviewcell reusablecell, uitableview tv) { _nativecell = base.getcell(item, reusablecell, tv); var formscell = item mytextcell; if (formscell != null) { formscell.propertychanged -= onpropertychanged; formscell.propertychanged += onpropertychanged; } setcheckmark(formscell); return _nativecell; } void onpropertychanged(object sender, propertychangedeventargs e) { var formscell = sender mytextcell; if (formscell == null) return; if (e.propertyname == mytextcell.ischeckedproperty.propertyname) { setcheckmark(formscell); } } private void setcheckmark(mytextcell formscell) { if (formscell.ischecked) _nativecell.accessory = uitableviewcellaccessory.checkmark; else _nativecell.accessory = uitableviewcellaccessory.none; } } } sample usage 1
and, sample usage like:
<tableview intent="settings"> <tablesection title="sort order"> <local:mytextcell text="first last" ischecked="false" /> <local:mytextcell text="last, first" ischecked="true" /> </tablesection> </tableview> sample usage 2
you can listen tapped event ensure ischecked property works expected.
for example, bind property viewmodel:
<tableview intent="settings"> <tablesection title="sort order"> <local:mytextcell tapped="handle_tapped" text="{binding [0].name}" ischecked="{binding [0].isselected}" /> <local:mytextcell tapped="handle_tapped" text="{binding [1].name}" ischecked="{binding [1].isselected}" /> </tablesection> </tableview> and handle tap event:
public settingviewmodel[] settings = new []{ new settingviewmodel { name = "first last", isselected = false }, new settingviewmodel { name = "last first", isselected = true }, }; void handle_tapped(object sender, system.eventargs e) { var cell = sender textcell; if (cell == null) return; var selected = cell.text; foreach(var setting in settings) { if (setting.name == selected) setting.isselected = true; else setting.isselected = false; } } 
Comments
Post a Comment