【问题标题】:Validating data in WPF textboxes before instantiating a C# object?在实例化 C# 对象之前验证 WPF 文本框中的数据?
【发布时间】:2012-06-15 14:58:55
【问题描述】:

我有一个带有 ListBox 的 WPF 浏览器应用程序,其中包含有关 Bicycle 类的多个对象的信息。该应用程序的下半部分包含许多文本框,用户可以在其中输入有关新自行车的信息。我的目标是使用验证规则(我已经工作过的规则)来显示验证错误,如果用户没有在字段中输入可接受的值并且在所有字段都通过验证测试之前不允许提交数据。我的问题是,如果数据未绑定到实例化的 Bicycle 对象,我不确定如何验证数据。我应该在接受零参数的 Bicycle 类中创建一个构造函数并将 TextBox 值绑定到此实例吗?或者有什么方法可以将验证规则绑定到类的属性而不创建该类的实例?来源是什么?

编辑:提交后,带有用户文本框输入的 Bicycle 对象将存储在 ObservableCollection 中,该集合会填充 ListBox。如果我使用 Bicycle 类的一个实例来绑定数据,我不确定如何从 TextBoxes 中获取数据以将多个(唯一)自行车添加到 ObservableCollection。

编辑:我将 TextBoxes 绑定到与集合分开的 Bicycle 对象,并将其中的值传递到新的 Bicycle 对象中,当用户按下提交按钮时,该对象可以添加到集合中。我无法弄清楚如何复制 Bicycle 对象,而不仅仅是将原始对象作为引用传递,但是将值发送到新 Bicycle 对象的构造函数可能会避免像this 这样的问题。

【问题讨论】:

  • 只需创建一个方法即可对您进行所有验证。然后在处理数据之前,调用验证类。如果通过则返回true,否则返回false。
  • 我建议你看看在你的 Bicycle 类上实现 IDataErrorInfo 接口(或者创建一个 BicycleViewModel 并遵循 MVVM 模式)。然后在您的构造函数中,您可以在“必需”字段上设置初始错误,并且绑定应该选择它。这可能需要进行一些修改,因为它不会重用您拥有的现有验证规则。

标签: c# wpf data-binding


【解决方案1】:

在您的代码隐藏中,创建一个 Bicycle 实例。在您的代码中拥有一个返回该 Bicycle 实例的公共属性。然后将所有文本框绑定到自行车上的属性。即:Bicycle.TireSize,或 Bicycle.Color,或其他。然后,您可以在用户完成输入数据后验证 Bicycle 对象。如果它是有效的,那么您的 Bicycle 已经构建好了,您可以将它发送到您需要存放它的任何地方。

【讨论】:

  • 有没有什么办法可以返回 Bicycle 的实际值而不是引用,这样如果用户在 TextBoxes 中输入不同的值,就可以制作一个可以存储的新 Bicycle 和 TextBox值不会仍然绑定到旧 Bicycle 对象的内容?
  • 在这种情况下,我所做的是在 Bicycle 对象上放置一个复制构造函数。然后,我将自行车编辑器的自行车对象设置为原始自行车的副本。那样的话,如果我们不喜欢这些变化,原来的就不会改变。如果我们接受更改,我们会将原始 Bicycle 设置为 Bicycle Editor's Bicycle,然后进行更改。
猜你喜欢
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多