Перетаскивание из источника данных в окно WPF не работает

Мне поручено разработать программу управления контактами для моей компании. У нас есть VS 2012, и поскольку я никогда не использовал WPF, прежде чем я подумал, что буду использовать его для разработки этого приложения.

У меня возникла огромная проблема при запуске связывания при использовании инфраструктуры сущности для базы данных, к которой сначала относится firebase database.

Я следовал инструкциям в этой ссылке к письму. http://msdn.microsoft.com/en-us/data/jj574514.aspx

Объекты отображаются в окне источников данных просто отлично. Но когда я перетаскиваю в окно, ничего не происходит. Не знаю, что я делаю неправильно, и не могу найти кого-либо еще с этой проблемой.

Может кто-нибудь помочь мне здесь? Я везде искал. Любая помощь приветствуется

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

Я пришел к следующим выводам:

  • В этой статье показан очень простой сценарий получения данных из контекста Entity Framework и его отображение в WPF DataGrid.
  • В нем нет каких-либо валидаций или бизнес-правил.
  • Он не имеет никакого поведения пользовательского интерфейса, такого как условное включение / отключение или отображение / скрытие элементов пользовательского интерфейса.
  • Такой сценарий – это то, где конструктор полезен, когда вам на самом деле ничего не нужно, кроме получения / сохранения данных из / в БД.
  • К сожалению (или, к счастью, для всех нас, разработчиков, которые зарабатывают на жизнь этим), большинству приложений потребуется определенный уровень валидации и бизнес-правил и некоторый уровень логики пользовательского интерфейса.
  • Дизайнер действительно бесполезен, когда дело доходит до разработки сложной логики.

Вы можете использовать конструктор для таких ситуаций, когда вам не нужна сложная логика, однако я должен предупредить вас о следующих минусах:

  • Дизайнер WPF Visual Studio создает фиксированные и фиксированные пользовательские интерфейсы с фиксированной позицией. эти типы пользовательских интерфейсов плохо работают при работе на компьютерах с различными разрешениями экрана и настройками DPI. Также как winforms.
  • Он также создает XAML, у которого много ненужных вещей (таких как x:Name="categoryIdColumn" и такие вещи, как Margin="13,13,43,191" которые действительно плохи с точки зрения Margin="13,13,43,191" / масштабируемости)
  • Из того, что я видел, созданный конструктором XAML также содержит CollectionViewSource , это тоже хорошо и плохо. Это хорошо, потому что он позволяет создавать Design-Time Data в DataGrid, но это также плохо, потому что он раздувает ваш XAML множеством ненужных вещей и вводит ненужные которые усложняют ситуацию.

Теперь это минимальный XAML, необходимый для этого DataGrid, без поддержки данных времени разработки:

       

Ты видишь? На самом деле быстрее набрать это (тем более с помощью Intellisense), чем то, что вам нужно, чтобы просмотреть окно свойств и установить эти свойства вручную.

Мое предложение состоит в том, что вы знакомы с XAML вместо того, чтобы настаивать на том, чтобы сделать что-то


Еще один важный аспект, который следует иметь в виду, заключается в том, что, вообще говоря, вы не ставите что-либо в кодировке в WPF, потому что это не нужно, поэтому этот учебник действительно противоречит WPF. Он делает все , но это нормально, потому что это на самом деле учебник Entity Framework, а не учебник WPF.


легкость развития

Вам действительно нужно пересмотреть то, что вы называете «легкостью развития». Когда дело доходит до разработки пользовательского интерфейса, я называю «легкость развития» фактически возможностью выполнять то, что я хочу, с помощью пользовательского интерфейса, не прибегая к практическим процессуальным правилам, связанным с использованием P / Invoke (независимо от того, что это означает) и типа «владельца» вещей для вечности.

WPF обеспечивает БЕСПЛАТНУЮ простоту разработки, а не поддельную простоту разработки, представленную winforms

  • winforms позволяет вам делать все с помощью дизайнера (и это происходит только потому, что код, создаваемый разработчиком, на самом деле такой дерьмовый, что никто бы никогда не использовал winforms, если у них не было дизайнера), но затем, когда дело доходит до добавления сложного DataBinding или UI логики вы навсегда застряли с недееспособностью winforms.

  • WPF рекомендует ручную запись XAML не только потому, что XAML является декларативным (в отличие от процедурного подхода winforms), но также потому, что уровни настраиваемости и повторного использования настолько высоки, что подход, ориентированный на проектировщика, не имеет смысла.


drag and drop – это легкий выход

Нет, это не так. На самом деле это трудный путь. Легкий способ – изучить XAML и уметь делать то, что вы даже не можете себе представить, с winforms .


Если подход, ориентированный на проектировщика, по-прежнему имеет смысл для вас, вы можете попробовать Expression Blend

Автоматическое создание сетки данных из ваших моделей

Использование источника данных для перетаскивания шаблона на элемент управления WPF – отличный и быстрый способ встать и работать!

Начните с этого: в своем проекте создайте папку с именем Models, затем сначала используйте либо Entity Framework DB, либо код вручную, которые вы хотите показать.

В этой же папке создайте фиктивный class, который является свойством IEnumerable следующим образом.

 public IEnumerable MyCollection { get; set; } 

Оттуда перейдите в главное меню Visual Studio, в View / Other Windows / Data Source и щелкните по этой ссылке.

Мастер источника данных

Нажмите Объект и найдите свойство MyCollection, только что созданное выше.

Теперь откройте пользовательский элемент управления или окно в WPF, но сохраните панель инструментов datasources.

Он должен по умолчанию использовать DataGrid, но вы можете щелкнуть правой кнопкой мыши на источнике данных и изменить его на детали, datagrid или выбрать индивидуальные свойства classа, который он представляет.

Просто перетащите этот источник данных в область сетки XAML. Щелкните правой кнопкой мыши новый материал, который вы видите, и нажмите «Сброс», чтобы установить размер содержимого всего windows.

После этого вы получите код, введенный в код позади представления, как показано в окне, загруженном в это окно, usercontrol и т. Д.

  // Do not load your data at design time. if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) { //Load your data here and assign the result to the CollectionViewSource. System.Windows.Data.CollectionViewSource myCollectionViewSource = (System.Windows.Data.CollectionViewSource)this.Resources["Resource Key for CollectionViewSource"]; myCollectionViewSource.Source = your data // } 

Вернитесь к XAML и найдите свойство CollectionViewSource KEY, которое также было вставлено, когда вы перетащили свойство в XAML. Это выглядит так:

Коллекция View Source KEY

Используйте имя ключа в коде позади, а затем «Свяжите» CVS с вашим источником данных, который является перечисляемым типа MyClassModel, который может находиться в модели просмотра или в коде позади представления по вашему выбору.

Если вы используете только CollectionViewSource в качестве datacontext сетки, вам не нужно внедрять INPC для любых базовых наборов! CVS автоматически обновляет представление каждый раз, когда источник обновляется! Как только вы добьетесь этого, вы можете создать рабочий просмотр прототипов данных за 2 минуты! Забудьте ручную кодировку XAML, которая занимает слишком много времени.

  • Когда следует использовать # и = в элементах управления ASP.NET?
  • Есть ли способ определить, где объявляется / создается привязка WPF?
  • WPF перед записью
  • ItemsControl с несколькими DataTemplates для viewmodel
  • Обнаружение ошибок проверки WPF
  • Принуждение WPF TextBox больше не работает в .NET 4.0
  • Обход проблемы из-за отсутствия оператора 'nameof' в C # для безопасного хранения данных по типу?
  • Как правильно привязать xml к WPF DataGrid?
  • Связывание WPF ComboBox с пользовательским списком
  • WPF: привязка ContextMenu к команде MVVM
  • Каковы различные режимы привязки WPF?
  • Давайте будем гением компьютера.