2009-06-03 5 views
9

Итак, у меня есть общий вопрос о WPF. Я немного пошутил с ASP.NET MVC, и в разметке он имеет intellisense на вашем объекте viewmodel, поэтому вы не ошибаетесь (я люблю его).WPF Databinding intellisense

Войдите в WPF, я люблю его, я использую подход MVVM и одну неприятную вещь, которую мне нужно сделать, это убедиться, что я правильно привязываюсь к своей модели просмотра. Поэтому я набираю что-то в своем xaml, тогда я либо 1) если я ленив, просто запустите приложение и нажмите 2) Если я не ленивый a) Посмотрите на текущий DataContext элемента управления, который я работать с. b) Перейдите к этому классу ViewModel и просмотрите свойства c) Найдите мою собственность, а затем щелкните мышкой на моем экране и убедитесь, что я правильно ее произнес.

Я считаю, что вы можете посмотреть свой вывод трассировки на неправильные привязки во время выполнения, но есть ли что-то в горизонте, чтобы позволить intellisense в xaml. View должен знать о моей ViewModel, так почему бы не разоблачить это в xaml.

Я думаю, что было бы хорошо для IDE, чтобы сделать это для меня, смысл, когда я типа «{Binding» он должен идти визуальное дерево найти первое ненулевое DataContext и отобразить свойства, пусть я выбираю один и там у тебя есть.

Я что-то упустил? Есть ли альтернативы. Любое понимание?

EDIT:

Что касается комментариев ниже, есть способ установить DataContext во время разработки, например,

<Window.Resources> 
    <DesignTimeData:DesignTimeCustomers x:Key="designTimeCustomersDS" /> 
</Window.Resources> 

который отрывок из этого блога: http://karlshifflett.wordpress.com/2008/10/11/viewing-design-time-data-in-visual-studio-2008-cider-designer-in-wpf-and-silverlight-projects/

Все это делает ссылки класс в XAML.

Так что, если бы не дизайнер мог использовать отражение в datacontext, чтобы дать вам все свойства для этого класса?

+0

В некотором смысле WPF действительно светит - в других это POS. Это один из тех других. –

+0

Вот почему я использую тесты для проверки всех (ну, почти всех) представлений привязки к соответствующим ViewModels. – Snowbear

+0

Как уже было предложено ниже, используйте Resharper (с d: DataContext set), это сэкономит вам много времени. вы можете напрямую генерировать свойства viewmodel из xaml с помощью alt + enter – Boklucius

ответ

4

Так что с места не мог дизайнер затем использовать отражение на DataContext, чтобы дать вам все свойств для этого класса?

Resharper 6 имеет эту функцию и может показывать вам элементы d: DataContext в intellisense, если вы установите d: DataContext в представлении.

4

Visual Studio 2010 будет поддерживать intellisense on Bindings. Однако это ограничивается свойствами самого объекта Binding. Например, после ввода «{Binding» в редактор XAML, я получаю intellisense для остальных свойств (Path, ElementName и т. Д.).

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

+0

Вот ссылка на видео MIX09, которое проходит через некоторое время, ускоренную перемотку вперед до 20 минут, чтобы попасть в подборщик ресурсов и разубеждение: http://videos.visitmix.com/MIX09/T73M – rmoore

+0

Учитывая, что DataContext задает время выполнения, я сомневаюсь, что, к сожалению, можно реализовать intellisense для привязок. Просто потому, что тип переменной, заданной как DataContext, является Foo, вполне может быть, что свойства Bar и Bar являются честной игрой для привязки. Как Visual Studio могла знать об этом? – Andy

+0

Я сделал некоторые обновления выше, что в основном указывает, что мы можем назначить datacontext во время разработки. Но из ваших комментариев, похоже, это не на горизонте. – Jose

4

VS 2013:

IntelliSense с разрешенной DataContext enter image description here

IntelliSense с дез ign time DataContext enter image description here