如果我的DataGrid
绑定到一个MVVM属性,用户从网格中删除或添加一行,它难道不应该自动将数据添加或删除到与之绑定的ObservableCollection
吗?
我需要为此编写一个命令吗?它不能只是绑定到集合就可以工作吗?
XAML
<ExtendedGridControl:ExtendedDataGrid Grid.Row="5" Height="200" VerticalAlignment="Top" Grid.ColumnSpan="6" Margin="5,4,5,0" ItemsSource="{Binding InvoiceDetailsForSelectedJobInvoice, Mode=TwoWay}" AutoGenerateColumns="False">
<DataGrid.Columns>
<ExtendedColumn:ExtendedDataGridTextColumn Header="Description" Width="200*" AllowAutoFilter="False"
Binding="{Binding Detail_Item_Description}" />
<ExtendedColumn:ExtendedDataGridTextColumn Header="Unit" Width="50" AllowAutoFilter="False"
Binding="{Binding Detail_Item_Unit}" />
<ExtendedColumn:ExtendedDataGridTextColumn Header="Unit Price" Width="70"
Binding="{Binding Detail_Item_Unit_Price}" AllowAutoFilter="False"/>
<ExtendedColumn:ExtendedDataGridTextColumn Header="# of Units" Width="70"
Binding="{Binding Detail_Item_Number_Of_Units}" AllowAutoFilter="False"/>
<ExtendedColumn:ExtendedDataGridTextColumn Header="Discount %"
Binding="{Binding Detail_Item_Discount_Percentage}" Width="70" AllowAutoFilter="False"/>
<ExtendedColumn:ExtendedDataGridTextColumn Header="Discount"
Binding="{Binding Detail_Item_Discount}" Width="70" AllowAutoFilter="False"/>
<ExtendedColumn:ExtendedDataGridTextColumn Header="Total" Width="70"
Binding="{Binding Detail_Item_Total_Price}" AllowAutoFilter="False"/>
<DataGridComboBoxColumn Header="Revenue Allocation" Width="100*"
SelectedValueBinding="{Binding Service_That_Revenue_Is_Allocated_To}"
DisplayMemberPath="ServiceName" SelectedValuePath="ServiceID"
ItemsSource="{Binding Source={StaticResource source}}"/>
</DataGrid.Columns>
</ExtendedGridControl:ExtendedDataGrid>
视图模型
public class InvoiceViewModel: INotifyPropertyChanged
{
public ObservableCollection<InvoiceDetail> InvoiceDetailsForSelectedJobInvoice
{
get
{
if (_selectedInvoice != null)
{
_invoiceDetails = new ObservableCollection<InvoiceDetail>(_selectedInvoice.InvoiceDetails);
return _invoiceDetails;
}
return null;
}
set
{
_invoiceDetails = value;
NotifyPropertyChanged("InvoiceDetailsForSelectedJobInvoice");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}