2010-01-13 3 views
23

Я бы хотел, чтобы мой WPF Datagrid привязан к моей наблюдаемой коллекции, чтобы иметь пустую строку внизу, чтобы пользователь мог добавить дополнительную информацию. Я успешно связал данные, т. Е. Вижу это.WPat datagrid позволяет пользователю добавлять строки?

Почему «новый» пустой ряд не отображается? Вот моя XAML декларация:

<UserControl.Resources> 
    <CollectionViewSource x:Key="MyItems" Source="{Binding Path=AllItems}"> 
    </CollectionViewSource> 
</UserControl.Resource> 

<my:DataGrid HorizontalAlignment="Stretch" 
    AutoGenerateColumns="True" 
    SelectionUnit="FullRow" 
    CanUserAddRows="True" 
    CanUserDeleteRows="True" 
    DataContext="{StaticResource MyItems}" 
    ItemsSource="{Binding}"> 

PS: Я использую Josh Smith's MVVM implementation. Я также прочитал некоторые SO posts по вопросу и they не имеют helped.

Заранее спасибо.

Update 2010-01-14:

При возникновении события UserControl нагрузки, "CanUserAdddRows" является ложным. Я подозреваю, что имеет какое-то отношение к перечисленным условиям here.

ответ

33

Обнаружена проблема. Мой конструктор объекта, который является частью моего ObservableCollection, не был объявлен общедоступным.

* Хиты головы *

Спасибо за ваше время.

+8

Сохранял меня некоторое время. Обратите внимание, что вам нужен конструктор без параметров ... – Jobo

4

Новая пустая строка будет зависеть, если коллекция, которую вы связываете, реализует IEditableCollectionView. см. here. Это, как говорится, я обнаружил, что иногда это работает хорошо, а в других случаях необъяснимо, похоже, это не так, но IEditableCollectionView запускается

+0

Согласно представленной ссылке ObservableCollection уже реализует IEditableCollectionView. По крайней мере, так его интерпретировали. –

+1

Хотя, согласно http://msdn.microsoft.com/en-us/library/ms668604.aspx, это не так. Спасибо за совет. –

13

Убедитесь, что ваши объекты в ObeservableCollection имеют конструктор без параметров без параметров.