[英]WPF TextBox separate Validation source
我正在尝试找到一种解决方案,以使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/
有人知道解决方案吗?
-编辑-
我发现我对问题的解释不够充分;)。
实际上,.Net或我自己的程序中不存在ValidationSource标记,因为我不知道如何创建这样的构造,该构造采用与属性的绑定,使用其验证属性来验证属性,并以某种方式将验证信息提供给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上完成,它将显示是否已将端口设置为Ship。
-编辑2-
该表单是用于编辑Ship数据的CRUD表单。 文本框是选择器控件的一部分,该控件包含显示Port.Name的文本框和用于选择特定端口的按钮。
验证应表明是否已为船舶选择端口。 为此,在Ship.PortFK上使用NotNullValidator,如果尚未设置PortFK值,则会触发验证器,并警告用户选择端口。
因此,用户可以为船选择特定端口,此后文本框将显示Port.Name。 由于数据模型定义了端口对于船舶是必需的,因此TextBox的验证应向用户指示是否尚未为船舶选择端口。
您可以利用MultiBinding吗? MultiBinding使您可以将多个值转换为单个值。
<TextBox.ValidationSource>
<MultiBinding Converter="{StaticResource multiValueConverter}">
<Binding Path="Ship.Prop1" />
<Binding Path="Ship.Prop2" />
</MultiBinding>
</TextBox.ValidationSource>
上面,Ship的两个属性被传递到名为multiValueConverter的IMultiValueConverter(您需要实现自己的转换器)。
您的IMultiValueConverter实现应将这两个属性的值转换为单个值,无论您绑定到哪个值,它都可以使用-据我所知,并没有解决这个问题-但单个值可以是object []。
如果这样做没有帮助,也许您可以为我们提供更多源代码以及您要绑定到的对象的结构?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.