繁体   English   中英

WPF TextBox单独的验证源

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM