Типизированный WPF data binding
WPF databinding это конечно мощная вещь, контролы между собой можно байндить , но вот с байдингом к бизнес-объектам надо бы как-нибудь покрасивше.
http://www.fikrimvar.net/lestirelim/?p=15 лямбда в ксамле.
Вот Вот http://www.fikrimvar.net/lestirelim/?p=15 лямбда в ксамле.о спасибо , значит не один я заморочился над этой фигней
Замечания после беглого просмотра:
1. Нетипизированность не исчезает, а наоборот увеличивается. Лямбды как стринги в ксамле — отсюда получаем проверку ошибок только в рантайме, ухудшается навигация по коду, рефакторинга и т.д.
2. Для MultiBinding опять завязка на порядок упоминания Binding-ов, я этого избегаю через анонимный класс. (я тут думаю, что анонимный класс придется все-таки заменить на полноценный класс, это громоздко, но все равно лучше, чем массив — проще в сопровождении)
Замечу, что байндинг в кодбехайнде это даже хорошо. Ксамл это все-таки дизайнерская область, а байндинг программерская. Даже если ксамл и код правит один человек, разделение на дизайн и программную логику это правильно
2. Для MultiBinding опять завязка на порядок упоминания Binding-ов,там оказывается вторая часть есть
public Binding a { set { AddBinding("a", value); } }
public Binding b { set { AddBinding("b", value); } }
public Binding c { set { AddBinding("c", value); } }
public Binding d { set { AddBinding("d", value); } }
public Binding e { set { AddBinding("e", value); } }
public Binding f { set { AddBinding("f", value); } }
public Binding g { set { AddBinding("g", value); } }
public Binding h { set { AddBinding("h", value); } }
public Binding i { set { AddBinding("i", value); } }
public Binding j { set { AddBinding("j", value); } }
public Binding k { set { AddBinding("k", value); } }
public Binding l { set { AddBinding("l", value); } }
public Binding m { set { AddBinding("m", value); } }
public Binding n { set { AddBinding("n", value); } }
public Binding o { set { AddBinding("o", value); } }
public Binding p { set { AddBinding("p", value); } }
public Binding q { set { AddBinding("q", value); } }
public Binding r { set { AddBinding("r", value); } }
public Binding s { set { AddBinding("s", value); } }
public Binding t { set { AddBinding("t", value); } }
public Binding u { set { AddBinding("u", value); } }
public Binding v { set { AddBinding("v", value); } }
public Binding w { set { AddBinding("w", value); } }
public Binding x { set { AddBinding("x", value); } }
public Binding y { set { AddBinding("y", value); } }
public Binding z { set { AddBinding("z", value); } }
Оставить комментарий
6yrop
Я уже , что реализацию датабайдинга в WPF нельзя назвать элегантной. В связи с этим, я начал размышляя на тему, как бы скрыть всю эту нетипизированность и конверторы. В новой версии C# у нас же есть lambda expression и AST, т.е. есть возможность вытаскивать имена свойств (и даже цепочки свойств) в типизированном виде. Вот что получилось на текущий момент.В качестве примера я взял преобразование над парой свойств FirstName и LastName. На форме два поля и ниже выводится FirstName+LastName большими буквами
Вот как это выглядит в коде
Все типизировано и без конвертора
Работающий код можно посмотреть здесь.
P.S.
В дальнейшем будет возможность указывать не DependencyProperty, а просто свойство контрола, как-то так
В случае одного свойства промежуточный класс не нужен, и будет совсем просто