WPF DataGrid:使用MVVM立即保存单元格更改 [英] WPF DataGrid: Save cell changes immediately with MVVM

查看:131
本文介绍了WPF DataGrid:使用MVVM立即保存单元格更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我简化了一个DataGrid,看起来像这样:

I have a DataGrid simplified looking like this:

<DataGrid AutoGenerateColumns="False" 
          ItemsSource="{Binding Parts}" 
          SelectedItem="{Binding SelectedPart}" >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Binding="{Binding Path=Name, Mode=TwoWay}" />
        <DataGridTemplateColumn Header="PartType" >
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.PartTypes}" 
                              SelectedItem="{Binding PartType, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding PartType}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

我的ViewModel看起来像这样:

My ViewModel looks something like this:

public class PartListViewModel
{
    private ObservableCollection<Part> _parts;
    public ObservableCollection<Part> Parts
    {
        get { return _parts; }
        set
        {
            _parts = value;
             OnPropertyChanged("Parts");
        }
    }

    private Part _selectedPart;
    public Part SelectedPart
    {
        get { return _selectedPart; }
        set
        {
            _selectedPart = value;
            OnPropertyChanged("SelectedPart");
        }
    }
}

现在我想更改datagrid单元立即存储到数据库中。

Now I want changes to datagrid cells being stored immediately to the database. How to do that in MVVM?

当前,我听DataGrid的 OnCellEditEnding 事件并将记录保存在背后的代码。但这很丑陋:

Currently I listen to the OnCellEditEnding event of the DataGrid and save the record in the code-behind. But that is pretty ugly:

private void DataGrid_OnCellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
    var viewModel = (PartListViewModel) DataContext;
    viewModel.SavePart((Part) e.Row.Item);
}


推荐答案

您可以执行以下操作。
(您需要添加对 System.Windows.Interactivity 您可以从此处下载程序集

You can do something like this. (you need to add reference to System.Windows.Interactivity, you can download the assemblies from here)

然后在其中添加对命名空间的引用XAML。
xmlns:i = http://schemas.microsoft.com/expression/2010/interactivity

Then add reference to the namespace in the XAML. xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

<i:Interaction.Triggers>
  <i:EventTrigger EventName="CellEditEnding">
     <i:InvokeCommandAction Command="{Binding SomeCommand}"/>
  </i:EventTrigger>
</i:Interaction.Triggers>

这篇关于WPF DataGrid:使用MVVM立即保存单元格更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆