3

如果 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));
        }
    }
}
4

2 回答 2

1

DataGrids 不会自动对可观察的集合执行此操作。删除保存在内存中,您必须挂钩CollectionChanged事件以检查插入和删除。

这一切都在这里说明:http: //www.codeproject.com/Articles/30905/WPF-DataGrid-Practical-Examples#updates

于 2012-09-28T02:27:08.743 回答
1

我继续在我的视图模型中使用 aBindingList而不是a ObservableCollection,它似乎可以满足我的需要。

于 2013-05-29T15:25:52.423 回答