2017-09-28 12 views
0

私のウィンドウに2つのDecimalUpDownコントロールがあります。 1つは最大値を表示する必要があります。もう1つはTextBoxの最小値です。 最小コントロールは最大値より大きい値を持つことはできず、その逆もありません。2つのDecimalUpDownコントロール間の有効な値を確認する - MVVM

enter image description here

赤の値が間違ったものであることに注意してください。

どうすれば実装できますか? MVVMパターンを使用しています。

ありがとうございます。 Steve

+0

MinimumValueUpDownのMaxValueプロパティをMaximumValueUpDownの値にDataBindできますか?およびその逆?それが私の最初のアイデアです。 – Fildor

+0

あなたはMVVMを言った。 xamlを表示し、モデルを表示します。そうすれば答えが出やすくなります。質問は少し広いですが、 "validation wpf"を検索してください。私は単にsetterを投げて、['ExceptionValidationRule'](https://msdn.microsoft.com/en-us/library/system.windows.data.binding.validatesonexceptions(v = vs.110).aspx)他の人は、コンバーターや[強制](http://drwpf.com/blog/2010/05/05/value-coercion-for-the-masses/)(専用ユーザーコントロールの依存関係プロパティー)を利用することもできます。 – Sinatr

答えて

1

あなたはあなたのビューモデルで検証ロジックを実装する必要があります。

public class MyViewModel : IDataErrorInfo 
{ 
    private int _min; 
    public int Min 
    { 
     get { return _min; } 
     set { _min = value; } 
    } 

    private int _max; 
    public int Max 
    { 
     get { return _max; } 
     set { _max = value; } 
    } 

    public string Error { get { return null; } } 

    public string this[string columnName] 
    { 
     get 
     { 
      switch(columnName) 
      { 
       case "Min": 
        if (_min > _max) 
         return "Min cannot be greater than Max"; 
        break; 
       case "Max": 
        if (_max < _min) 
         return "Max cannot be smaller than Min"; 
        break; 
      } 

      return null; 
     } 
    } 
} 

XAML:

<xctk:IntegerUpDown Value="{Binding Min,ValidatesOnDataErrors=True}" /> 
<xctk:IntegerUpDown Value="{Binding Max,ValidatesOnDataErrors=True}" /> 

WPFのデータ検証方法については、次のブログ記事を参照してください。https://blog.magnusmontin.net/2013/08/26/data-validation-in-wpf/

ビューモデルでIDataErrorInfoまたはそれより新しいINotifyDataErrorInfoのいずれかをbasiclly実装します。

+0

ありがとうございます@ mm8これは私が探していたものです.... :) – jclstefan

+0

私はウィンドウを動的に作成した場合、つまりDecimalUpDownsのリストがあることを意味します。このソリューションを使用する機会はありますか? – jclstefan

+0

別の問題がある場合は、新しい質問をしてください。また、問題を示すサンプルコードをいくつか含めてください。 – mm8

-2

テキストボックスからonChangeイベントを使用できます。 (あなたはすべてのイベントを見つけるでしょう、あなたのテキストボックスを選択して、イベントウィンドウを確認してください)

温家宝変更=>値 を比較すると、エラー=>ショーのメッセージ私はあなたがのセッターで最大と最小値を比較する必要があります理解し

+0

こんにちは@AhdBkあなたの提案をありがとうが、私は本当に2つのDecimalUpDownがお互いを比較する必要があります。 TextBoxはデモンストレーションの目的のためだけです – jclstefan

-1

あなたのVMのプロパティ

関連する問題