我目前有一个绑定到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模式。
感谢您的帮助。
答案 0 :(得分:1)
您可以看到CellEditEnding
或RowEditEnding
是否解决了您的问题。
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
。
答案 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,数据将被填充。