如果 myDataGrid
绑定到一个 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));
}
}
}