这可能是预期的功能,但对我来说似乎是一个错误。
我正在使用开箱即用的WPF DataGrid,绑定到ObservableCollection并尝试使用一些验证规则以提供良好的用户反馈。不用说,有比我数得出的问题更多,但我会坚持立即解决问题。
以下是问题的摘要:
1.将ItemsSource属性绑定到ObservableCollection 2.填充集合 3.以会导致验证错误的方式编辑网格中的项目 4.从ObservableCollection中以编程方式删除该项
当执行这些步骤时,GridView正确地识别到已从集合中删除该项,并从网格中删除了该行。然而,Grid现在被卡在无效状态中,并且无法通过UI在Grid上执行进一步操作!
再次强调,这对我来说似乎是一个相当大的错误,因为能够以编程方式从集合中删除项目是一件大事。
有人遇到过这种情况吗?有什么建议可以解决它吗?
值得注意的是,我创建了一个单独的解决方案来隔离此问题,但是为了回答您可能有的一些问题:
您的对象是否实现了INotifyPropertyChanged?是的
这是自定义集合吗?不是,只是普通的ObservableCollection 您如何从集合中删除项目?
你是如何绑定验证规则的?
你的验证规则是什么样子的?
我正在使用开箱即用的WPF DataGrid,绑定到ObservableCollection并尝试使用一些验证规则以提供良好的用户反馈。不用说,有比我数得出的问题更多,但我会坚持立即解决问题。
以下是问题的摘要:
1.将ItemsSource属性绑定到ObservableCollection 2.填充集合 3.以会导致验证错误的方式编辑网格中的项目 4.从ObservableCollection中以编程方式删除该项
当执行这些步骤时,GridView正确地识别到已从集合中删除该项,并从网格中删除了该行。然而,Grid现在被卡在无效状态中,并且无法通过UI在Grid上执行进一步操作!
再次强调,这对我来说似乎是一个相当大的错误,因为能够以编程方式从集合中删除项目是一件大事。
有人遇到过这种情况吗?有什么建议可以解决它吗?
值得注意的是,我创建了一个单独的解决方案来隔离此问题,但是为了回答您可能有的一些问题:
您的对象是否实现了INotifyPropertyChanged?是的
这是自定义集合吗?不是,只是普通的ObservableCollection 您如何从集合中删除项目?
//Find any newly added item and remove it
var someObject = SomeObjects
.Where(obj => obj.SomeProperty == SomeValue)
.First();
SomeObjects.Remove(someObject );
你是如何绑定验证规则的?
<DataGridTextColumn Header="SomeProperty">
<DataGridTextColumn.Binding>
<Binding Path="SomeProperty">
<Binding.ValidationRules>
<val:RequiredValidator ValidationStep="ConvertedProposedValue"
ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
你的验证规则是什么样子的?
public class RequiredValidator : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
if (value == null || String.IsNullOrWhiteSpace(value as String))
return new ValidationResult(false, "Field is required!");
return ValidationResult.ValidResult;
}
}