[英]WPF Caliburn.Micro DataGrid Cell not updating before Event
我有一个使用Caliburn.Micro
的测试WPF
应用程序。 我正在尝试使用可编辑的DataGrid
进行构建。 当cell
/ row
更新时,数据将更新数据库。
我遇到的问题是当我的RowEditEnding
事件被触发时。 它在编辑行之前传递行中的信息。 我想知道如何获取传递给函数的更新信息。
任何帮助,将不胜感激。 相关代码如下:
看法:
<DataGrid x:Name="People"
AutoGenerateColumns="False"
CanUserReorderColumns="True"
CanUserAddRows="True"
AlternatingRowBackground="#dfdfdf"
cal:Message.Attach="[Event RowEditEnding] = [Action SavePeopleEdit($this)]">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding FirstName}">
<DataGridTextColumn.Header>
<TextBlock Text="First"
ToolTip="This Persons First Name" />
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding LastName}">
<DataGridTextColumn.Header>
<TextBlock Text="Last"
ToolTip="This Persons Last Name" />
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding pNumber}">
<DataGridTextColumn.Header>
<TextBlock Text="Person Number"
ToolTip="This Persons pNumber" />
</DataGridTextColumn.Header>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
视图模型:
using Caliburn.Micro;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Windows;
using System.Windows.Controls;
namespace SqliteEncryptionTest.ViewModels
{
public class ShellViewModel : Screen
{
public IObservableCollection<PersonModel> _people;
public IObservableCollection<PersonModel> People {
get { return _people; }
set {
_people = value;
NotifyOfPropertyChange(() => People);
}
}
public void SavePeopleEdit(object sender)
{
if (People != null)
{
MessageBox.Show(People[3].LastName.ToString());
}
}
public ShellViewModel()
{
LoadPeopleList();
}
private void LoadPeopleList()
{
People = new BindableCollection<PersonModel>(SqliteDataAccess.LoadPeople());
}
}
}
Pavel Anikhouski 在对原始帖子的评论中似乎暗示了这一点,但我会将此作为答案加以澄清。
这是因为 RowEditEnding(和 CellEditEnding)在提交编辑之前执行(请参阅此文档帖子),因此您可以根据需要停止或编辑更改,您可以获取已更改的数据,如此SO 答案所示
然而,最好的选择是将UpdateSourceTrigger=PropertyChanged
添加到您希望在编辑时更新的每个 DataGrid 列的绑定,这将在执行 RowEditEnding 之前在每次更改时更新模型。
<DataGrid x:Name="People"
AutoGenerateColumns="False"
cal:Message.Attach="[Event CellEditEnding] = [Action SavePeopleEdit($sender, $eventArgs)]">
<DataGrid.Columns>
<!-- Will update while changed -->
<DataGridTextColumn Header="First" Binding="{Binding FirstName, UpdateSourceTrigger=PropertyChanged}"/>
<!-- Will not update until after the change is committed -->
<DataGridTextColumn Header="Last" Binding="{Binding LastName}"/>
</DataGrid.Columns>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.