


| dataForm = bindable.FindByName<SfDataForm>("dataForm"); dataForm.RegisterEditor("Entry", new CustomEntryEditor(dataForm)); dataForm.RegisterEditor("MiddleName", "Entry"); dataForm.RegisterEditor("FirstName", "Entry"); dataForm.RegisterEditor("Surname", "Entry"); dataForm.IsReadOnly = true; dataForm.LayoutManager = new DataFormLayoutManagerExt(dataForm); public class DataFormLayoutManagerExt : DataFormLayoutManager { public DataFormLayoutManagerExt(SfDataForm dataForm) : base(dataForm) { } protected override View GenerateViewForLabel(DataFormItem dataFormItem) { var label = base.GenerateViewForLabel(dataFormItem); label.IsEnabled = false; (label as Label).TextColor = Color.LightGray; return (label as Label); } } public class CustomEntryEditor : DataFormEditor<CustomEntry> { CustomEntry customEntry; public CustomEntryEditor(SfDataForm dataForm):base(dataForm) { } protected override CustomEntry OnCreateEditorView() { customEntry = new CustomEntry(); if (DataForm.IsReadOnly) customEntry.IsEnabled = false; customEntry.Text = "Custom entry"; return customEntry; } DataFormItem dataItem; protected override void OnInitializeView(DataFormItem dataFormItem, CustomEntry view) { dataItem = dataFormItem; base.OnInitializeView(dataFormItem, view); } protected override void OnWireEvents(CustomEntry view) { view.TextChanged += View_TextChanged; view.Unfocused += View_Unfocused; } protected override bool OnValidateValue(CustomEntry view) { var dataFormItemView = view.Parent as DataFormItemView; return (DependencyService.Get<IDataForm>().ValidateDataFormItem(DataForm,dataItem.Name)); } private void View_Unfocused(object sender, FocusEventArgs e) { OnValidateValue(sender as CustomEntry); } private void View_TextChanged(object sender, TextChangedEventArgs e) { OnCommitValue(sender as CustomEntry); } protected override void OnCommitValue(CustomEntry view) { var dataFormItemView = view.Parent as DataFormItemView; var textValue = view.Text; this.DataForm.ItemManager.SetValue(dataFormItemView.DataFormItem, view.Text); } } public class CustomEntry : Entry { } public interface IDataForm { bool ValidateDataFormItem(SfDataForm dataForm,string propertyName); } |
| [assembly: ExportRenderer(typeof(CustomEntry), typeof(CustomEntryRenderer))] namespace GettingStarted.iOS { public class CustomEntryRenderer : EntryRenderer { protected override void OnElementChanged(ElementChangedEventArgs<Entry> e) { base.OnElementChanged(e); CALayer border = new CALayer(); float width = 1.0f; border.BorderWidth = width; border.MasksToBounds = true; border.BorderColor = UIColor.Gray.CGColor; var mainFrame = this.Control.Superview.Frame; this.Control.Layer.MasksToBounds = true; this.Control.BorderStyle = UITextBorderStyle.None; this.Control.TextColor = UIColor.LightGray; this.ClipsToBounds = true; this.Control.Layer.AddSublayer(border); //Need to set Y position value based on RowSpan and label position in DataForm. border.Frame = new CoreGraphics.CGRect(0, 40 - 1, 500, 1f); } } } |
| public class CustomEntryEditor : DataFormEditor<CustomEntry> { public CustomEntryEditor(SfDataForm dataForm) : base(dataForm) { } protected override CustomEntry OnCreateEditorView() { CustomEntry customEntry = new CustomEntry(); customEntry.Keyboard = Keyboard.Create(KeyboardFlags.None); return customEntry; } DataFormItem dataItem; protected override void OnInitializeView(DataFormItem dataFormItem, CustomEntry view) { base.OnInitializeView(dataFormItem, view); dataItem = dataFormItem; } protected override void OnWireEvents(CustomEntry view) { view.TextChanged += View_TextChanged; view.Unfocused += View_Unfocused; } protected override bool OnValidateValue(CustomEntry view) { var dataFormItemView = view.Parent as DataFormItemView; return (DependencyService.Get<IDataForm>().ValidateDataFormItem(DataForm, dataItem.Name)); } private void View_Unfocused(object sender, FocusEventArgs e) { OnValidateValue(sender as CustomEntry); } private void View_TextChanged(object sender, TextChangedEventArgs e) { OnCommitValue(sender as CustomEntry); } protected override void OnCommitValue(CustomEntry view) { var dataFormItemView = view.Parent as DataFormItemView; var textValue = view.Text; this.DataForm.ItemManager.SetValue(dataFormItemView.DataFormItem, view.Text); } } |
| assembly: Xamarin.Forms.Dependency(typeof(DataFormValidation))] public class DataFormValidation : IDataForm { public bool ValidateDataFormItem(SfDataForm dataForm, string propertyName) { var nativeObject = dataForm.GetType().GetProperty("NativeObject", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).GetValue(dataForm); if (nativeObject != null) { var nativeDataForm = (nativeObject as Syncfusion.Android.DataForm.SfDataForm); var method = nativeDataForm.ItemManager.GetType().GetMethod("ValidateDataFormItem", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public); var nativedataFormItem = nativeDataForm.ItemManager.DataFormItems[propertyName]; if (nativedataFormItem != null && method != null) { var nativeValue = nativeDataForm.ItemManager.GetValue(nativedataFormItem); method.Invoke(nativeDataForm.ItemManager, new object[] { nativedataFormItem, nativeValue, true }); var isValid = nativedataFormItem.GetType().GetProperty("IsValid", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).GetValue(nativedataFormItem); return (bool)isValid; } } return true; } } |