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

How to add tooltip error message to textbox that is bound to int property in WPF using 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。 我想要的是将鼠标悬停在消息上或 TextBox 上的 ToolTip 上,并带有自定义错误消息,例如 "ABC cannot be converted to integer, please put a valid integer number"。我强调,错误消息必须是自定义的,而不是默认的。 谁能提供一些关于如何实现这一目标的见解?

Can anyone provide some insight on how to achieve that?

您可以使用 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>

请参阅以下博客post了解更多相关信息。

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