79440116

Date: 2025-02-14 17:28:05
Score: 1
Natty:
Report link

@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;
}
Reasons:
  • Long answer (-1):
  • Has code block (-0.5):
  • User mentioned (1): @Brandon
  • Looks like a comment (1):
  • Low reputation (0.5):
Posted by: programmerboy