我正在尝试找到一个解决方案,让TextBox显示并验证来自两个不同来源的数据,如下面的小例子所示:
<TextBox Text="{Binding Port.Name}"
ValidationSource="{Binding Ship.PortFK}"/>
这里Ship数据对象包含一个充当端口外键的属性,该属性有自己的验证器。
我已经探索了下面链接的ValidationRules的使用,但这只给了我PortFK的值,而我需要带有验证属性的属性。
http://michlg.wordpress.com/2010/01/29/wpf-custom-validationrule-with-an-additional-parameter/
有没有人知道这方面的解决方案?
- 编辑 -
我看到我没有充分解释我的问题;)。
实际上ValidationSource标记不存在于.Net或我自己的程序中,因为我不知道如何创建这样一种绑定到属性的构造,使用其验证属性验证属性并以某种方式提供验证信息到TextBox的验证结构。
进一步详细说明数据对象:
public class Port
{
public int PortPK { get; set; }
[StringLengthValidator]
public string Name { get; set; }
...
}
public class Ship
{
[NotNullValidator]
public int PortFK { get; set; }
...
}
因此TextBox.Text绑定应显示Port.Name而不验证它。验证应在Ship.PortFK上完成,它将显示是否已将一个端口设置为发货。
- 编辑2 -
表单是用于编辑Ship数据的CRUD表单。 文本框是选择器控件的一部分,该控件由显示Port.Name的TextBox和用于选择特定端口的按钮组成。
验证应指明是否已为船舶选择了港口。为此,在Ship.PortFK上使用NotNullValidator,如果尚未设置PortFK值,则触发验证器并警告用户选择端口。
因此,用户可以为Ship选择特定端口,之后TextBox将显示Port.Name。 由于数据模型定义了船舶必须使用港口,因此TextBox的验证应向用户显示是否尚未为该船舶选择港口。
答案 0 :(得分:0)
你能使用MultiBinding吗? MultiBinding允许您将多个值转换为单个值。
<TextBox.ValidationSource>
<MultiBinding Converter="{StaticResource multiValueConverter}">
<Binding Path="Ship.Prop1" />
<Binding Path="Ship.Prop2" />
</MultiBinding>
</TextBox.ValidationSource>
上面,Ship的两个属性被传递给名为multiValueConverter的IMultiValueConverter(您需要实现自己的转换器)。
你的IMultiValueConverter实现应该将这两个属性的值转换为一个值,这个值可以被你绑定的任何东西所消耗 - 据我所知,没有解决这个问题 - 但是这个值可能是一个对象[]。
如果这没有帮助,也许您可以向我们提供更多源代码以及您绑定的对象的结构?