WPF数据表格-添加和删除行以及MVVM

3

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

你是否正在使用双向绑定模式? - Bob.
是的,那就是我的意思……就像开箱即用一样,不需要命令。如果用户删除了行,我希望它也从集合中删除。 - DJ Burb
1
你能展示一下你是如何将ObservableCollection绑定到DataGrid的代码吗? - Bob.
我会检查运行时输出的错误。也许你的删除命令由于视图-视图模型连接不良而未被触发。 - zszep
已编辑,显示有问题的代码。 - DJ Burb
2个回答

1

我已经使用了一个BindingList而不是ObservableCollection在我的视图模型中,它似乎适合我所需的。


1

我使用了BindingList而不是ObservableCollection... 看起来对我所需的工作。 - DJ Burb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接