编辑 DataGridTextColumn 时在当前行上执行方法
Executing a method on current row when editing a 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 模式。
感谢您的帮助。
您可以查看 CellEditEnding
或 RowEditEnding
是否解决了您的问题。
DoSomething
是您 ViewModel
中的 ICommand
。
<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>
...
您必须从 Microsoft 网站下载 Blend Sdk
。
当您使用 MVVM 模式时,我假设 "Person" class 将有一个 属性 用于 "Username"。实施 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}" />
一旦单元格失去焦点,这将调用用户名 属性 的 setter,数据将被填充。
我目前有一个绑定到 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 模式。
感谢您的帮助。
您可以查看 CellEditEnding
或 RowEditEnding
是否解决了您的问题。
DoSomething
是您 ViewModel
中的 ICommand
。
<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>
...
您必须从 Microsoft 网站下载 Blend Sdk
。
当您使用 MVVM 模式时,我假设 "Person" class 将有一个 属性 用于 "Username"。实施 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}" />
一旦单元格失去焦点,这将调用用户名 属性 的 setter,数据将被填充。