如何使用MVVM Light将工具提示错误消息添加到绑定到WPF中的int属性的文本框中

时间:2017-12-19 20:26:00

标签: wpf xaml mvvm mvvm-light

让我们说我有一个简单的WPF,其文本框以两种方式绑定到整数属性。这是XAML:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
    </Grid.RowDefinitions>
    <TextBox Text="{Binding Number, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>

MVVM模型:

public class MyModelView : ViewModelBase
{
    public int Number
    {
        get
        {
            return _number;
        }
        set
        {
            _number = value;
            RaisePropertyChanged();
        }
    }
    private int _number;
}

现在,如果我输入TextBox非整数的内容,例如"ABC",则TextBox边框会变为红色,这表示"ABC"无法转换为int。 我想要的是将鼠标悬停在邮件上,或ToolTip上的TextBox上显示自定义错误消息,例如"ABC cannot be converted to integer, please put a valid integer number"。我强调,错误消息必须是自定义的,而不是默认的。 任何人都可以提供一些有关如何实现这一目标的见解吗?

1 个答案:

答案 0 :(得分:2)

  

任何人都可以提供一些有关如何实现这一目标的见解吗?

您可以使用ValidationRule

自定义错误消息
public class StringToIntValidationRule : ValidationRule
{
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        int i;
        if (int.TryParse(value.ToString(), out i))
            return new ValidationResult(true, null);

        return new ValidationResult(false, "Please enter a valid integer value.");
    }
}

<强> XAML:

<TextBox>
    <TextBox.Text>
        <Binding Path="Number" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <local:StringToIntValidationRule ValidationStep="RawProposedValue"/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

有关此内容的更多信息,请参阅以下博客文章。

WPF中的数据验证: https://blog.magnusmontin.net/2013/08/26/data-validation-in-wpf/