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

问题描述 投票:0回答:1

假设我有一个简单的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"。我强调,错误消息必须是自定义的,而不是默认的。谁能提供一些有关如何实现这一目标的见解?

wpf xaml mvvm mvvm-light
1个回答
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/

© www.soinside.com 2019 - 2024. All rights reserved.