0

我有一个简单的场景和一个问题,过去几天我似乎无法解决。

好的,首先我使用 MVVM 将我的 View 绑定到 ViewModel 上。我在我的视图中有几个文本框,它们绑定到 ViewModel 中的多个属性(大多数字符串)(实际上绑定到带有字符串属性的自定义对象(类型 Person,名称 SelectedPerson),对象是视图模型的属性)。此对象实现 INotifyPropertyChanged 和 IDataErrorInfo。它还有一个名为 Age 的 int 属性。我的视图中还有一个按钮,它绑定到我的视图模型中的命令,CanExecute 内部的命令测试 SelectedPerson 的属性,如果一切正确,则返回 true。

现在我的问题是:如果我从我的视图中放入我的年龄文本框,而不是 int,会出现一个红色的 tectagle(这是正常的,因为转换存在异常),但在那个特定的时刻,后面的对象( SelectedPerson, type Person) 没有发送 newValue (setter 到那个属性 Age,或者 IDataErrorInfo 成员不拦截值....我想这是正常的,因为没有任何“新”值,因为我首先在文本框中输入了不正确的格式)。

所以,也许我再说一遍,问题是:如果没有设置新的年龄(新的不正确的年龄),那么后面的对象仍然保持最后一个值,如果它是正确的,那么命令本身就是正确的(可以执行将return true) 并且按钮已启用

正如您可以想象的那样,当当前属性不通过转换方法时,我希望禁用提交按钮(它是一个在数据存储模块中保存当前人员详细信息的按钮)。

PS:我使用了 IValueConverter 类,在绑定到 Age 的那个文本框中,我使用了我的 StringToIntConverter 类....但是在 Convert Method 我不知道如何传递 SelectedPerson 绑定对象(我只是传递文本值,并返回 int 值)

我想一种方法是使用 MultiBinding 场景,但我不确定。

如果我可以从该转换器传递 SelectedPerson 内部的 Convert 方法,我可以使转换器本身的该命令无效。

对不起我的英语,我知道它远非完美:) 并提前感谢您的时间。

4

1 回答 1

1

我认为最干净的解决方案是将文本框绑定到字符串属性,并更新您的视图模型,以便该属性名称的 IDataErrorInfo 实现尝试将字符串转换为 int 并返回结果。然后,您的 CanExecute 测试还将将此转换包含在验证测试中。

于 2011-03-07T17:32:53.437 回答