wpf中处理 gridcontrol 虚拟化造成的事件触发
在wpf中,gridcontrol控件默认会启用虚拟化。我们不能禁用 GridControl 的虚拟化机制。因此在数据量变多,需要移动滚动条时,就会触发事件。
例如:
<dxg:GridColumn Header="描述">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<dxe:TextEdit EditValueChanged="TextEdit_EditValueChanged" Text="{Binding Data.Description, Mode=TwoWay}" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
在滚动条滚动时,总是会触发EditValueChanged,这不是我希望的结果。
解决办法:
在事件处理的时候,判断控件是否获得焦点,只有在获取焦点的时候才去触发事假中的方法。control.IsKeyboardFocusWithin是关键。
private void CmbTextChangedAction(EditValueChangedEventArgs e)
{
TextEdit tbName = (TextEdit)e.OriginalSource;
if (tbName.IsKeyboardFocusWithin)
{
string tbNameString = tbName.Text;
Regex regex = new Regex(RegexHelper.CheckNamePattern)
}
}