编辑DataGridTextColumn时在当前行上执行方法

时间:2017-04-05 14:42:12

标签: c# wpf xaml mvvm datagridtextcolumn

我目前有一个绑定到Person对象的DataGrid:

<DataGrid ItemsSource="{Binding Person}" Width="1700" Height="840" AutoGenerateColumns="False" CanUserAddRows="true" ...>
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Header="Select" Binding="{Binding IsChecked}"/>
        <DataGridTextColumn Header="Gender" Binding="{Binding Gender}" IsReadOnly="True"/>
        <DataGridTextColumn Header="Username" Binding="{Binding Username}" />
        ...
    </DataGrid.Columns>
</DataGrid>

当用户编辑网格并添加新用户名时,我需要触发一个进入数据库的方法,并根据新的用户名填充其他信息(性别等)。

目前,用户输入用户名,检查与该行关联的复选框,然后单击按钮以填充其余数据。我试图摆脱这些额外的2个步骤,因为这应该自动发生。

我正在使用MVVM模式。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以看到CellEditEndingRowEditEnding是否解决了您的问题。

DoSomethingICommand中的ViewModel

   <DataGrid xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" ...>
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="RowEditEnding">
                <i:InvokeCommandAction Command="{Binding DoSomething}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        ...

您必须从微软的网站下载Blend Sdk。         

答案 1 :(得分:1)

当您使用MVVM模式时,我假设“Person”类将具有“Username”的属性。实现INotifyPropertyChanged接口并将属性更改为普通属性(如果它是auto属性),并在通过所需的任何检查通知属性后调用数据库更新。像这样:

    private string username;
    public string Username
    {
        get
        {
            return username;
        }
        set
        {
            username= value;
            NotifyPropertyChanged("Username");
            if (<condition>)
               PopulateData();
        }
    }

在xaml中进行以下更改:

<DataGridTextColumn Header="Username" Binding="{Binding Username, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" />

一旦单元格失去焦点,这将调用Username属性的setter,数据将被填充。