开发者

Provide value on 'System.Windows.Data.Binding' threw an exception

I am adding a validation rule to a textbox (following examples on WPF 4 Unleashed by Adam Nathan)

When starting an application, I am faced with the following cryptic error message

Provide value on 'System.Windows.Data.Binding' threw an exception

Provide value on 'System.Windows.Data.Binding' threw an exception

What does the error mean and what needs to be done to address the problem?

Here is the full source code

XAML

<Window.Resources>
    <Style x:Key="controlStyle" TargetType="{x:Type Control}">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="RenderTransform">
                    <Setter.Value>
                        <RotateTransform Angle="20" />
                    </Setter.Value>
                </Setter>
                <Setter Property="Foreground" Value="Black" />
            </Trigger>
        </Style.Triggers>
        <Setter Property="FontSize" Value="22" />
        <Setter Property="Background" Value="Purple" />
        <Setter Property="Foreground" Value="White" />
        <Setter Property="Height" Value="50" />
        <Setter Property="Width" Value="50" />
        <Setter Property="RenderTransformOrigin" Value=".5,.5" />
        <Setter Property="RenderTransform">
            <Setter.Value>
                <RotateTransform Angle="10" />
            </Setter.Value>
        </Setter>
        <Setter Property="TextBox.TextAlignment" Value="Right" />
    </Style>
    <Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="True">
                <Setter Property="Background" Value="Red" />
                <Setter Property="ToolTip" 
                        Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<StackPanel Orientation="Vertical">
    <StackPanel Orientation="Horizontal">
        <TextBox Style="{StaticResource textBoxStyle}">
            <TextBox.Text>
                <Binding>
                    <Binding.ValidationRules>
                        <local:JpgValidationRule />
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>
        </TextBox>
    </StackPanel>

    <StackPanel Orientation="Horizontal">
        <Button S开发者_如何学运维tyle="{StaticResource controlStyle}">1</Button>
        <ComboBox Style="{StaticResource controlStyle}">
            <ComboBox.Items>2</ComboBox.Items>
        </ComboBox>
        <Expander Style="{StaticResource controlStyle}" Content="3" />
        <TabControl Style="{StaticResource controlStyle}">
            <TabControl.Items>4</TabControl.Items>
        </TabControl>
        <ToolBar Style="{StaticResource controlStyle}">
            <ToolBar.Items>5</ToolBar.Items>
        </ToolBar>
        <!--<InkCanvas Style="{StaticResource controlStyle}" />-->
        <TextBox Style="{StaticResource controlStyle}" Text="7" />
    </StackPanel>
</StackPanel>

JpgValidationRule

using System.Globalization;
using System.IO;
using System.Windows.Controls;

namespace StylesDemo
{
    public class JpgValidationRule : ValidationRule
    {
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            string fileName = value.ToString();

            // Reject nonexistent files:
            if (!File.Exists(fileName))
                return new ValidationResult(false, "Value is not a valid file!");

            // Reject files that don't end in .jpg:
            if (Path.GetExtension(fileName).ToUpper() != ".JPG")
                return new ValidationResult(false, "Value is not a .jpg file!");

            return new ValidationResult(true, null);
        }
    }
}


I think it is related to default binding mode for TextBox.Text which is TwoWay, and for that Path is required. You can try and set Mode="OneWay" as an attribute in the Binding tag that should work here but I am not completely sure about your overall requirement.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜