WPF数据绑定/验证URI?

时间:2008-10-26 04:13:40

标签: wpf validation

我当前的设置会将Text的{​​{1}}属性绑定到某个TextBox对象。我喜欢使用WPF的内置验证来检测无效的URI,然后从那里开始。但这似乎没有用?

我想如果我输入例如“aaaa”作为URI,它会引发异常。因此,触发我当前的设置,它应该检测如下的异常:

Uri

然后我想我可以检查各种验证属性,就像这样?

<TextBox Grid.Column="1" Name="txtHouseListFile" DockPanel.Dock="Right" Margin="3">
    <TextBox.Text>
        <Binding Source="{StaticResource Settings}" Path="Default.HouseListFile" Mode="TwoWay">
            <Binding.ValidationRules>
                <ExceptionValidationRule />
            </Binding.ValidationRules>
        </Binding>  
    </TextBox.Text>
</TextBox>

但是,这似乎不起作用。也许它在尝试转换时不会抛出异常?或者也许我的设置错了?对两者的更正都会很好。

2 个答案:

答案 0 :(得分:1)

您可以尝试创建我们自己的ValidationRule(继承自ValidationRule)。在此类中,重写Validate(...)并尝试创建URI对象并捕获异常。在catch中,只需将e.Message设置为异常消息。

(我不太确定你的绑定源是什么。它是一个URI对象还是一个字符串?)

答案 1 :(得分:0)

好吧,我想我知道发生了什么事。绑定不知道如何将字符串转换为URI对象(因为文本框 Text 属性是一个字符串)。你需要一个转换器来帮助他。

试试这个: 创建一个转换器类(继承自IValueConverter):

  • 使用Uri构造函数将字符串转换为Uri
  • 将Uri转换为字符串(使用多个getter之一)

将转换器放入Binding中。然后,收敛器将在Uri构造函数中抛出异常,并且您的ExceptionValidationRule将捕获它。

Look here了解如何使用转换器。