Привязка данных со строгим контролем типов в WPF/Silverlight/XAML?

C объектная система (COS) обещание звуков (это находится все еще в альфа-версии). Это пытается сохранить минимальным доступные понятия ради простоты и гибкости: универсальное объектно-ориентированное программирование включая открытые классы, метаклассы, метаклассы свойства, дженерики, мультиметоды, делегацию, владение, исключения, контракты и закрытия. Существует , делают набросок документа (PDF), который описывает его.

Исключением в C является реализация C89 TRY-CATCH-FINALLY, найденного на других языках OO. Это идет с testsuite и некоторыми примерами.

Оба Laurent Deniau, который работает много над ООП в C.

28
задан Ken Smith 24 March 2011 в 19:06
поделиться

5 ответов

Кен, C # выиграет от краткого синтаксического элемента для ссылки на класс PropertyInfo. Структуры PropertyInfo - это статические объекты, определенные во время компиляции, и поэтому они предоставляют уникальный ключ для каждого свойства объекта. Затем свойства могут быть проверены во время компиляции.

Единственная проблема с этим - странность обработки экземпляра объекта как типа данных, учитывая, что строгая типизация применяется к типам, а не к значениям типа. Традиционно компиляторы не применяют значения данных и вместо этого полагаются на код времени выполнения для проверки своих данных. В большинстве случаев невозможно даже проверить данные во время компиляции, но отражение - один из тех крайних случаев, когда это, по крайней мере, возможно.

В качестве альтернативы компилятор может создать новый тип данных для каждого свойства. Я мог представить себе создание множества типов, но это позволит обеспечить принудительное связывание свойств во время компиляции.

Один из способов подумать об этом заключается в том, что CLR представила уровень отражения, который был другим уровнем значимости по сравнению с системами, которые ему предшествовали. Теперь он используется для некоторых довольно впечатляющих вещей, таких как привязка данных. Но его реализация пока находится на уровне метаданных, генерируется своего рода отчет от компилятора для каждого типа данных. Я предположил, что одним из способов развития C # было бы продвижение метаданных для проверки времени компиляции.

Мне кажется, что кто-то мог бы разработать инструмент компиляции, который добавляет эту проверку уровня отражения. Новый intellisense в этом роде. Было бы сложно в общем случае обнаружить строковые параметры, которые предназначены для сравнения с PropertyInfos, но это возможно. Новый тип данных, например PropertyString. можно определить, четко определяя параметры, которые будут сравниваться с PropertyInfos в будущем.

В любом случае, я чувствую твою боль. Я отыскал множество ссылок на имена свойств с ошибками. Честно говоря, в WPF есть много неприятностей, связанных с отражением. Полезной утилитой может быть средство проверки исполнения WPF, которое проверяет наличие всех ваших конструкторов статических элементов управления, правильность определения ваших атрибутов, точность привязок, правильные ключи и т. Д. Существует длинный список проверок, которые можно выполнить.

Если бы я все еще работал в Microsoft, я бы, наверное, попробовал это сделать.

В WPF есть много неприятностей, связанных с отражением. Полезной утилитой может быть средство проверки исполнения WPF, которое проверяет наличие всех ваших конструкторов статических элементов управления, правильность определения ваших атрибутов, точность привязок, правильные ключи и т. Д. Существует длинный список проверок, которые можно выполнить.

Если бы я все еще работал в Microsoft, я бы, наверное, попробовал это сделать.

В WPF есть много неприятностей, связанных с отражением. Полезной утилитой может быть средство проверки исполнения WPF, которое проверяет, находятся ли все ваши конструкторы статических элементов управления, правильно определены ваши атрибуты, точны привязки, правильные ключи и т. Д. Существует длинный список проверок, которые можно выполнить.

Если бы я все еще работал в Microsoft, я бы, наверное, попробовал это сделать.

5
ответ дан 28 November 2019 в 03:39
поделиться

В Visual Studio 2010 будет поддержка IntelliSense для привязки данных. Похоже, именно к этому и сводится ваша жалоба, поскольку привязка данных строго типизирована. . Вы просто не узнаете до времени выполнения, удалось ли привязка или нет, и чаще всего она терпит неудачу тихо, а не с шумным исключением. При сбое привязки WPF сбрасывает пояснительный текст через трассировки отладки, которые можно увидеть в окне вывода Visual Studio.

Помимо отсутствия поддержки IntelliSense и нескольких странных синтаксических проблем, привязка данных выполняется довольно хорошо (по крайней мере, по моему мнению). Чтобы получить дополнительную помощь по отладке привязок данных, я бы прочитал прекрасную статью Беа здесь .

10
ответ дан 28 November 2019 в 03:39
поделиться

Похоже, то, что вы просите, не потребует каких-либо изменений структуры и, возможно, уже исправлено в VS 2010 (у меня это не установлено).

Дизайнер XAML нуждается в IntelliSense для привязок в DataTemplate, когда вы указываете DataType, что уже возможно следующим образом:

<DataTemplate DataType="{x:Type data:Person}">
...
</DataTemplate>

Я согласен, что наличие IntelliSense в этом случае было бы полезным изменением, но другие ваши предложения, похоже, не учитываются возможность изменять DataContexts во время выполнения и использовать DataTemplates для разных типов, чтобы отображать их уникальным образом.

2
ответ дан 28 November 2019 в 03:39
поделиться

Кроме того, если у вас открыто окно вывода при отладке проекта, VS сообщит вам о любых ошибках привязки данных, то есть о том, что свойство, к которому привязан Control, не существует.

0
ответ дан 28 November 2019 в 03:39
поделиться

Это моя самая большая проблема с XAML! Отсутствие того, что компилятор применяет действительные привязки данных, является БОЛЬШОЙ проблемой. Меня действительно не волнует intellisense, но меня действительно волнует отсутствие поддержки рефакторинга.

Изменение имен или типов свойств опасно в приложении WPF - использование встроенной поддержки рефакторинга не приведет к обновлению привязок данных в XAML. Выполнение поиска и замены имени опасно, так как это может изменить код, который вы не собирались менять. Просмотр списка результатов поиска - заноза в заднице и отнимает много времени.

MVC уже некоторое время имеет строго типизированные представления - проект MVC contrib предоставляет их для MVC1, а MVC2 предоставляет их изначально. XAML должен поддерживать это в будущем, особенно если он используется в «гибких» проектах, где дизайн приложения со временем меняется. Я не смотрел на .NET 4.0 / VS2010, но надеюсь, что опыт намного лучше, чем есть на самом деле!

9
ответ дан 28 November 2019 в 03:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: