1

このプロパティにバインドされた MVVM WPF アプリケーションにテキスト ボックスがあります。

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

私の質問は、許可される値の範囲を制限するにはどうすればよいですか? たとえば、小数点以下 2 桁までにする必要があります。

同様の問題で、 という別のushortプロパティQuantityがあります。値は 0 であってはなりません。

ユーザーが不正な値を入力した場合 (たとえば、最初の例では小数点以下 2 桁以上、Quantity フィールドでは 0 など)、コントロールが赤い境界線で囲まれるように設定するにはどうすればよいですか?

ここに画像の説明を入力

4

3 に答える 3

1

IDataErrorInfoインターフェイスを見てください。このインターフェイスを XAML と組み合わせて使用​​すると、UI で検証エラーをユーザーに表示できます。

Google で検索すると、多くのサンプルとチュートリアルが見つかります。まず、Validation made easy with 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 に答える