1

我目前有一个绑定到 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>

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

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

我为此使用了 MVVM 模式。

感谢您的任何帮助。

4

2 回答 2

1

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

DoSomething是一个ICommand在你的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从微软的网站下载。

于 2017-04-05T16:33:46.490 回答
1

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

    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 属性的设置器。

于 2017-04-18T06:51:27.587 回答