2016-12-20 9 views
0

PersonViewModelにはDateTime DateOfBirthというプロパティがあります。問題があるビュー内の3つのテキストボックス(日、月、年)へのViewModelのDateTimeプロパティのバインド

enter image description here

、私はバインディング/検証を行う方法を見つけ出すことはできません:私は、次のthis layoutため表示/テンプレートを作成したい

  • 私が使うべき1つのDateTimeを3つの異なるバインド可能なプロパティ(日、月、年)にマッピングするDateTimeViewModel?はいの場合は、そのライフサイクルはどのようにすべきですか?つまり、Person.DateOfBirthのプロパティがあるので、バインドする必要がありますか?そして、1つのプロパティーが変更されたときにどのように検証を実行すればよいでしょうか、Person.DateOfBirthをそれからどのように更新すればよいでしょうか?

  • MultiValueConverterを使用する必要がありますか?はいの場合はどうすればいいですか?私はVMの多くのプロパティをVWの単一のプロパティにMultiBindingするのに慣れていますが、ViewModelの単一のプロパティをViewの多くのプロパティにマップする必要があります。

  • BindingGroupはどうですか?これはそのための良いユースケースですか?

+1

私は、Public DateTime(Offset?)DependencyPropertyを持つUserControlを作成し、コードビハインドでもう一方を翻訳するすべてのjiggeryポケリーを扱います。それはおそらくそれを行う最もクリーンな方法でしょう。エラーテンプレートを処理するのは少し難しいかもしれませんが、あなたが不正行為をすると、あまりにも多くの作業(例えば、設定可能な最小/最大の日付、編集に対するBordersの表示/色の変更など) – Will

答えて

0

あなたは複数のTextBoxにdateOfBirthのの異なる特性をバインドすることができます。またIsValidMonthRuleなど、IsValidDayRuleのようなこれらのテキストボックスに個別に検証ルールを指定することができます

<TextBox x:key ="1" Text = "{Binding DateOfBirth.Day}" StringFormat=""../> 
<TextBox x:key ="2" Text = "{Binding DateOfBirth.Month}" StringFormat=""../> 
<TextBox x:key ="3" Text = "{Binding DateOfBirth.Year}" StringFormat=""../> 

、すなわち、あなたはで検証を行うことができますValidationRulesを使用したくない場合は、viewmodel自体を使用します。私はそれがよりクリーンなアプローチだと思う。

また、Willのコメントに記載されているように、このためのユーザーコントロールを作成することもできます。それはまた、より良いアプローチになります。

関連する問題