2010-05-24 2 views
0

Я работаю с DataGrid в WPF с отличными результатами. Тем не менее, теперь он дает мне неожиданные результаты после некоторых изменений.Результаты Datagrid не имеют смысла

ПЕРЕД: У меня был DataGrid на странице. DataContext был установлен в объект List, который был создан из класса, который существовал в рамках одного и того же проекта WPF. Пустая строка в нижней части DataGrid, добавлять новые записи, является видна

ПОСЛЕ: же страница, то же DataGrid. Но теперь объект List исходит из проекта библиотеки классов в рамках одного и того же решения. EXACT тот же код, но теперь он был извлечен в библиотеку классов. Пустая строка в нижней части таблицы данных, чтобы добавить новые записи не видна.

WTF?

+0

Я все еще ищу ответ на этот вопрос. Опять же, ничего в классе или пользовательском интерфейсе не изменилось. У моего VS-решения был один проект с интерфейсом и классом. Теперь у меня есть два проекта (исходный WPF и новая библиотека классов), тот же код в классе, но класс теперь находится в проекте библиотеки классов. Конечный результат просто не имеет смысла. –

ответ

0

Может быть, это какой-то вопрос безопасности или даже ошибка, я только что прочитал this:..

Я обнаружил, что если вы получаете доступ к CanAddRow из ListCollectionView раз перед тем вы используете коллекцию, волшебным образом CanUser AddRows из DataGrid становится истинным. Странный!

IEditableCollectionView ecv = new ListCollectionView(myRecordCache); 
bool b = ecv.CanAddNew; // dummy access 
MyGrid.DataContext = ecv; 
+0

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

+0

Я даю вам очки из-за вашей последовательной помощи. Благодарю. –

0

Что это за список? Имеет ли его публично видимый интерфейс возможность добавлять элементы или теперь является списком только для чтения (например, IEnumerable, ICollection?

+0

Это просто System.Collection.Generic List, ничего особенного на самом деле. Сам список состоит из пользовательских объектов. Сам код не изменился, он просто не попал в проект WPF в проект библиотеки классов. –

+0

Этого не должно произойти, просто переместив класс с помощью свойства, которое вы связали с вами ItemSource против другой сборки, что-то еще должно было измениться с помощью Это. – bitbonk

+0

Это действительно странная часть - ничего больше не изменилось. Я буквально просто перетаскивал между двумя проектами в решении, удалял его из проекта WPF, а затем менял ссылку на новую библиотеку классов и все.Это просто не имеет смысла. –

0

Я столкнулся с той же проблемой, когда я установил свойство DataGrid IsReadOnly = «True». Проверьте, есть ли у вас одна и та же настройка и попытаться удалить его, чтобы увидеть, что происходит

+0

Его хорошее предложение, и я попробовал, но получаю тот же (нежелательный) результат. Опять же, ничего на стороне пользовательского интерфейса не изменилось, единственное различие заключается в том, откуда происходит объект списка DataContext. –

4

Я думаю, что я, наконец, есть ответ. В принципе, я ошибся, я изменил крошечную часть класса. «Световая лампа» продолжалась, когда я прочитал ответы на этот вопрос: How do I create a new row in WPF DataGrid when it is bound to an XmlDataProvider?

Практический результат: Класс, к которому вы привязываетесь, должен иметь конструктор по умолчанию, чтобы отобразить редактируемый ряд!

В моем коде я сменил конструкторы (я совсем забыл об этом), которые не оставили по умолчанию. При добавлении конструктора по умолчанию в класс исправлена ​​проблема.

Смежные вопросы