2012-06-26 2 views
1

У меня есть ObservableCollection, связанный с DataGrid, и я хочу иметь возможность добавлять в него строки во время выполнения, используя фактические строки. Однако пустая строка не видна, поэтому пользователь не может добавлять строки. Я уже исследовал это, я добавил CanUserAddRows = true и IsReadOnly = false. Я также добавил пустой конструктор для объекта CostCenter, и он все еще не работает. Приведенный ниже код является то, что я до сих пор:Blank Row не отображается в DataGrid

В XAML:

<Window.Resources> 
    <CollectionViewSource x:Key="jobItemViewSource1" d:DesignSource="{d:DesignInstance my:JobItem, CreateList=True}" /> 
    <CollectionViewSource x:Key="CostCenterListViewSource" Source="{Binding Path=CostCenterList, Source={StaticResource jobItemViewSource1}}" /> 
</Window.Resources> 


<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Source={StaticResource CostCenterListViewSource}}" Name="costCenterListDataGrid" CanUserResizeRows="False" CanUserAddRows="True" CanUserDeleteRows="True" Background="LightGray" IsReadOnly="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn x:Name="nameColumn" Binding="{Binding Path=Name, Mode=TwoWay}" Header="Cost Center" /> 
     <DataGridTextColumn x:Name="glCodeColumn" Binding="{Binding Path=GlCode, Mode=TwoWay}" Header="Gl Code"/> 
     <DataGridTextColumn x:Name="costCenterPercentageColumn" Binding="{Binding Path=CostCenterPercentage, Mode=TwoWay}" Header="%"/> 
    </DataGrid.Columns> 
</DataGrid> 

В коде позади Я поставил DataContext:

costCenterListDataGrid.DataContext = item.CostCenterList; 

В JobItem Класс:

private ObservableCollection<CostCenter> costCenterList; 
public JobItem() 
{ 
    costCenterList = new ObservableCollection<CostCenter>();   
} 

public ObservableCollection<CostCenter> CostCenterList 
{ 
    get { return costCenterList; } 
    set 
    { 
     costCenterList = value; 
    } 

} 

и в классе CostCenter У меня есть:

Я попытался пропустить ненужный код, метод OnPropertyChanged работает так, как я использовал его в другом коде, иначе, надеюсь, этого достаточно для того, чтобы вы помогли мне разобраться. Также работает datacontext для JobItem, который я также не добавил в этот фрагмент.

+0

Я не получаю Source = {StaticResource jobItemViewSource1}} – Paparazzi

+0

, которая была создана автоматически VS, когда я использовал источник данных. Он ссылается на мои Windows.Resources – Erika

ответ

0

Это, возможно, было упущено, но вы привязываете данные DataGrid после добавления пустого объекта?

costCenterListDataGrid.DataContext = item.CostCenterList; 
costCenterListDataGrid.DataBind() 
+0

Ошибка «System.Windows.Controls.DataGrid» не содержит определения для «DataBind» и никакого метода расширения «DataBind», принимающего первый аргумент типа «System.Windows.Controls.DataGrid» 'можно найти (вам не хватает директивы using или ссылки на сборку?) – Erika

+0

Я никогда не использовал .DataBind() раньше. Я думал, что это первая линия. – Erika

+0

Да, извините, я просто смотрел на управление привязкой данных для system.web not system.windows. Это не работает. –

0

Ваш CollectionViewSource не создает вид коллекции в IEditableCollectionView типа, который необходим, если вы хотите, чтобы ваш DataGrid показать Добавить, Удалить и редактируемые строки.

http://blogs.msdn.com/b/vinsibal/archive/2008/10/01/overview-of-the-editing-features-in-the-wpf-datagrid.aspx

+0

Я попытался использовать: IEditableCollectionView ccView; ccView = costCenterListDataGrid.ItemsSource как IEditableCollectionView; и он всегда заканчивается как null – Erika