Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13644
|
|
Рейтинг: 787
|
|
WPF databinding
19.03.2008 00:33
|
|
|
а что, действительно, в WPF, чтобы вывести имя большими буквами, столько кода надо написсать? code:
<Application.Resources>
<local:StringToUpperCaseConverter x:Key='stringConverter'/>
</Application.Resources>
<Label Content='{Binding Path=FirstName, Converter={StaticResource stringConverter}}'/>
[ValueConversion(typeof (string), typeof (string))]
public class StringToUpperCaseConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string firstName = (string)value;
return 'FirstName: ' + firstName.ToUpper();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
(взято отсюда http://flexwinds.wordpress.com/2007/02/15/flex-and-wpf-a-com... ) К тому же все нетипизированно object value.... Да же в ASP.NET-е такое простое преобразование можно выполнить по месту.
И вы говорите, что это упрощает процесс разработки? Quote:
Только в WPF это не просто полезная фича, примочка к тому что есть, чтобы сделать программирование под Swing проще, а фактически основа на которой построен WPF, что коренным образом влияет на общий дизайн WPF. http://forum.b.gz.ru/ashowthreaded.php?Cat=&Board=prog&a...
Кстати, объясните мне сакральный смысл слова "декларативно" Quote:
что позволяет декларативно определять довольно сложный ГУИ
Просто уже от нескольких людей слышал, что, типа, как круто определять что-то декларативно в ASP.NET, в WPF или еще где-то. Насколько я понимаю, в случае ASP.NET и WPF термин "декларативно" отождествлялся с "определением в markup-е". Так за что ж вы так любите этот xml? и так недолюбливаете язык типа C#-а? Для разметки UI-контролов xml, наверное, действительно, подходит лучше, но для "программной логики" xml ужасен. Те же триггеры, которые я видел в примерах по WPF, выглядят ужасно громоздко. ... Вот еще вспоминается XSLT - технология на любителя ... .
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
Attila
|
R
|
|
|
|
Рег.: 18.12.2002
|
Сообщений: 16118
|
Из: ...вот именно там.
|
Рейтинг: 3169
|
|
|
чем тебе XSLT не угодил?
|
Кр-ть - с.т.! |
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13644
|
|
Рейтинг: 787
|
|
|
Quote:
чем тебе XSLT не угодил?
1. Простые вещи часто реализуются нетривиальным кодом. 2. В целом код плохо читаем.
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
DizzyDen
|
достаточно добр
|
|
|
|
Рег.: 04.03.2003
|
Сообщений: 51427
|
Из: http://лакалхвост
|
Рейтинг: 13546
|
|
|
Это все-таки прикольней.
|
If stateless paradigm is good for your code, why shouldn't it be for your country? |
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13644
|
|
Рейтинг: 787
|
|
|
я тут подумал, да, решение Microsoft-а в лоб и не красивое, но проблема, на самом деле, сложнее, чем может показаться на первый взгляд. Дело в том, что UI-контролы должны автоматически обновляться при изменении свойств бизнес-объектов - такую идеологию исповедует WPF databindiing. Делает ли это Flex, я не в курсе code: <mx:Label text='FirstName: {_person.firstName.toUpperCase()}'/>
Для автоматического обновления надо из строчки code: _person.firstName.toUpperCase()
выцепить "firstName". А если выражение более сложное? Не знаю насколько приспособлен язык ActionScript (из Flex) для такого, но C# пока на такое не ориентировался. Наверное, можно подумать использовать лямбда-выражения, но они появились в Framework 3.5, а WPF уже входил в Framework 3.0
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13644
|
|
Рейтинг: 787
|
|
|
Quote:
но они появились в Framework 3.5, а WPF уже входил в Framework 3.0
от Microsoft-а, как от одного поставщика, ждешь целостного согласованного решения. А они как всегда, выпускают экспериментальные версии, и испытывают их на нас. Почему бы не проводить такие эксперименты в каких-нибудь исследовательских лабораториях...
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
ais
|
CMXCIX-CXI
|
|
|
|
Рег.: 18.11.2003
|
Сообщений: 15489
|
|
Рейтинг: 387
|
|
|
В ответ на:
А если выражение более сложное?
Чето я ничего не понимаю, можно конкретный пример где чего не работает?
|
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13644
|
|
Рейтинг: 787
|
|
Re: WPF databinding
[re: ais]
19.03.2008 22:14
|
|
|
Quote:
А если выражение более сложное?
Чето я ничего не понимаю, можно конкретный пример где чего не работает?
не понятно все? или не понятно конкретно то, что ты выделил? Все работает, но в WPF слишком много кода для такого простого случая.
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
dimich
|
Pooh-Bah
|
|
|
|
Рег.: 15.04.2004
|
Сообщений: 2354
|
Из: Б-1422лев
|
Рейтинг: 2
|
|
|
Напиши свою библиотеку конверторов.
Чисто кодом в WPF обходится можно, но часто протые вещи на вид в XAML, делаются сложно кодом.
|
|
ais
|
CMXCIX-CXI
|
|
|
|
Рег.: 18.11.2003
|
Сообщений: 15489
|
|
Рейтинг: 387
|
|
|
В ответ на:
или не понятно конкретно то, что ты выделил?
То что выделил. В ответ на:
но в WPF слишком много кода для такого простого случая.
Ты один раз напишешь конвертер и можеш его использовать в десяти местах, а используя входящие параметры можно вообще написать набор конвертеров на все случаи жизни.
|
|
dimich
|
Pooh-Bah
|
|
|
|
Рег.: 15.04.2004
|
Сообщений: 2354
|
Из: Б-1422лев
|
Рейтинг: 2
|
|
Re: WPF databinding
[re: ais]
19.03.2008 23:53
|
|
|
правильно, и делай эти конверторы дружелюбными к XAML, чтобы создавать конкретные их экземпляры декларативно
|
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13644
|
|
Рейтинг: 787
|
|
|
Quote:
Напиши свою библиотеку конверторов.
Quote:
Ты один раз напишешь конвертер и можеш его использовать в десяти местах, а используя входящие параметры можно вообще написать набор конвертеров на все случаи жизни.
ребят, просто ЛОЛ , вы что издеваетесь. Будет время напишу, что своя библиотека, к тому же, конвертеров это плохо.
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13644
|
|
Рейтинг: 787
|
|
|
Quote:
и делай эти конверторы дружелюбными к XAML, чтобы создавать конкретные их экземпляры декларативно
тк объясни что ж вас так притягивает "декларативно" на XAML-е? я там в первом посте спрашивал об этом.
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13644
|
|
Рейтинг: 787
|
|
|
замечу, что я выступаю не за то, чтобы все кодом на C# писать. Я за разумный баланс. WPF на мой взгляд начала злоупотреблять XMAL-ом.
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
Orient
|
|
|
|
|
Рег.: 18.09.2004
|
Сообщений: 924
|
Из: Singapore
|
Рейтинг: 133
|
|
|
Сделай свойство FirstNameInUpper и биндись к нему
|
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13644
|
|
Рейтинг: 787
|
|
|
Quote:
Сделай свойство FirstNameInUpper и биндись к нему
да, я вот как раз ехал в метро, и думал над тем, может все "расчеты" надо засовывать в бизнес-объекты. Но пока я не пришол к окончательному выводу, правильно ли это.
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
Orient
|
|
|
|
|
Рег.: 18.09.2004
|
Сообщений: 924
|
Из: Singapore
|
Рейтинг: 133
|
|
|
Да, меня в БО это засовывать тоже не очень прельщает, но пока ничего лучшего не придумал.
Можно сделать класс PersonForGui, который в конструкторе берет исходного Person и выставляет свойства, предназначенные именно для биндинга. Обернуть таким образом все бизнес-объекты. Тут могут возникнуть небольшие заморочки с коллекциями.
Вообще, тут бы кодогенерация неплохо пошла, как и для объектов, мапленных на БД и объектов DTO для передачи меж App-доменами. Они часто очень похожие, но все-таки разные
Еще в GUI пользователи <почему-то> не хотят видеть имя колонки в гриде "PersonNameInUpper", а хотят "User name".
|
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13644
|
|
Рейтинг: 787
|
|
|
случайно наткнулся на статью, где автор тоже понимает суть проблемы. в конце он там предлагает анализировать IL код http://www.codeproject.com/KB/WPF/wpfdatabinding.aspx
P.S. в конце страничке оказалось, что автор из России
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
dimich
|
Pooh-Bah
|
|
|
|
Рег.: 15.04.2004
|
Сообщений: 2354
|
Из: Б-1422лев
|
Рейтинг: 2
|
|
|
Quote:
Да, меня в БО это засовывать тоже не очень прельщает, но пока ничего лучшего не придумал.Можно сделать класс PersonForGui, который в конструкторе берет исходного Person и выставляет свойства, предназначенные именно для биндинга.Обернуть таким образом все бизнес-объекты.Тут могут возникнуть небольшие заморочки с коллекциями.Вообще, тут бы кодогенерация неплохо пошла, как и для объектов, мапленных на БД и объектов DTO для передачи меж App-доменами. Они часто очень похожие, но все-таки разныеЕще в GUI пользователи <почему-то> не хотят видеть имя колонки в гриде "PersonNameInUpper", а хотят "User name".
похоже на Model-View-ViewModel паттерн, который как раз заточен под WPF binding, насколько я понимаю.
|
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13644
|
|
Рейтинг: 787
|
|
|
|