1

我在 MVVM WPF 应用程序中有一个文本框,绑定到此属性:

private decimal _cartPayment;
public decimal CartPayment {
    get { return _cartPayment; }
    set { 
        _cartPayment = value;
        this.NotifyPropertyChanged("CartPayment");
    }
}

我的问题是,如何限制允许的值范围?例如,它应该只有两位小数。

在类似的问题中,我有另一个ushort名为 的属性Quantity,该值不应为 0。

如何设置它,以便当用户输入非法内容时(例如,第一个示例超过 2 位小数,数量字段为 0),控件将被红色边框包围,像这样?

在此处输入图像描述

4

3 回答 3

1

看一下IDataErrorInfo接口。您可以将此界面与 XAML 结合使用,以向用户显示 UI 上的验证错误。

谷歌它你会发现很多示例和教程。首先看一下使用 IDataErrorInfo 轻松进行验证

于 2013-05-27T08:56:27.057 回答
1

你可以使用DataAnnotations

样本

using System.ComponentModel.DataAnnotations;

[Required] //tells your XAML that this value is required
[RegularExpression(@"^[0-9\s]{0,40}$")]// only numbers and between 0 and 40 digits allowed
public int yourIntValue
{
    get { return myValue; }
    set { myValue= value; }
}

好的,这里有一个 komplett 示例

XAML

<Window x:Class="DataAnnotations.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBox Width="100" Height="25"
            Text="{Binding Path=CartPayment, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" Name="txtPayment" Margin="22,20,381,266" />
    </Grid>
</Window>

代码隐藏

using System.Windows;
using System.ComponentModel.DataAnnotations;

namespace DataAnnotations
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new Cl();
        }
    }

    public class Cl
    {
        private decimal _cartPayment;
        [Required]
        [RegularExpression(@"^\d+(\.\d{1,2})?$")]
        public decimal CartPayment
        {
            get { 
                return _cartPayment; }
            set
            {
                _cartPayment = value;
            }
        }
    }
}
于 2013-05-27T08:57:18.773 回答
0

您可以使用ValidationRules

更多信息: system.windows.data.binding.validationrules

于 2013-05-27T09:07:42.970 回答