gpt4 book ai didi

c# - WPF DataGrid 单元格值更改事件

转载 作者:可可西里 更新时间:2023-11-01 02:58:52 42 4
gpt4 key购买 nike

我有一个看起来像这样的设置:

// myDG is a DataGrid whose columns are DataGridTextColumn
ObservableCollection<MyItem> myOC;
// myOC is populated with some new MyItem
myDG.ItemsSource = myOC;

其中 MyItem 实现了 INotifyPropertyChanged。当用户向单元格中输入值时,正确捕获的方法是什么?

我尝试在 MyItem 上捕获 PropertyChanged,但我也在后台定期更新值(想法是当用户手动编辑值时,将触发一个标志,告诉定期计算避免覆盖手动输入的数据)。所以 PropertyChanged 捕获所有内容,包括我不想要的定期更新。我想有可能做到这一点(通过在我进行定期计算时设置一个标志,然后检查 PropertyChanged 事件处理程序上是否缺少标志——但我想知道是否有更简单的解决方案。)

我已经 try catch myDG.CurrentCellChanged 但每次用户更改单元格选择时都会触发,而不是在他们编辑单元格内容时触发。

编辑:这是 XAML:

<DataGrid x:Name="myDG" ItemsSource="{Binding}" AutoGenerateColumns="False" Margin="10,10,182,0" VerticalAlignment="Top" Height="329" ClipboardCopyMode="IncludeHeader">
<DataGrid.Columns>
<DataGridTextColumn Header="Col1" Binding="{Binding Prop1}" IsReadOnly="True"/>
<DataGridTextColumn Header="Col2" Binding="{Binding Prop2}" IsReadOnly="False"/>
</DataGrid.Columns>
</DataGrid>

这是 MyItem 实现(使用 Fody/PropertyChanged ):

[ImplementPropertyChanged]
class MyItem : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

public string Prop1 { get; set; }
public string Prop2 { get; set; }

public MyItem()
{
Prop1 = Prop2 = "";
}
}

最佳答案

解决方案是捕捉 CellEditEnding 事件。

// In initialization
myDG.CellEditEnding += myDG_CellEditEnding;

void myDG_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
if (e.EditAction == DataGridEditAction.Commit)
{
var column = e.Column as DataGridBoundColumn;
if (column != null)
{
var bindingPath = (column.Binding as Binding).Path.Path;
if (bindingPath == "Col2")
{
int rowIndex = e.Row.GetIndex();
var el = e.EditingElement as TextBox;
// rowIndex has the row index
// bindingPath has the column's binding
// el.Text has the new, user-entered value
}
}
}
}

关于c# - WPF DataGrid 单元格值更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34423422/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com