@Brandon Minnick - love your Markup Toolkit, but it becomes very verbose when you are working with Nested properties. If you have 10 nested properties then repetitive code will be produced. Hence I came with this initial method to create for generating Entry (as I had 10 Entry). Also, you can see I commented out "static" keyword, otherwise I couldn't use bindingPath
in getters and setters.
var myEntry = CreateEntry(nameof(AddNewItem.City), "City", _viewmodel.FieldsEnabled);
private Entry CreateEntry(string bindingPath, string placeholder = "", bool isEnabled = true, Keyboard keyboard = null)
{
var entry = new Entry() { Placeholder = placeholder }
.Bind
(
targetProperty: Editor.TextProperty,
getter: (AddNewViewModel vm) => /*static*/
{
var prop = typeof(AddNewItem).GetProperty(bindingPath);
return prop?.GetValue(vm.AddNewModel) as string;
//return vm.AddNewModel.Comment;
},
handlers: new (Func<AddNewViewModel, object?>, string)[]
{
(vm => vm, nameof(AddNewViewModel.AddNewModel)),
(vm => vm.AddNewModel, bindingPath),
},
setter: (AddNewViewModel vm, string? text) => /*static*/
{
var prop = typeof(AddNewItem).GetProperty(bindingPath);
prop?.SetValue(vm.AddNewModel, text);
//vm.AddNewModel.Comment = text;
}
)
.Bind(Editor.IsEnabledProperty, (AddNewViewModel vm) => isEnabled);
if (keyboard is not null)
entry.Keyboard = keyboard;
return entry;
}