将ViewModel中的DateTime属性绑定到视图中的三个TextBox(日,月,年)

时间:2016-12-20 17:59:35

标签: wpf mvvm

我有一个PersonViewModel,其中包含DateTime DateOfBirth属性。我想为this layout后面的内容创建一个视图/模板:

enter image description here

问题是,我无法想象如何进行绑定/验证:

  • 我应该使用DateTimeViewModel,它将单个DateTime映射到三个不同的可绑定属性(Day,Month,Year)?如果是的话,它的生命周期应该是什么?我的意思是,我有Person.DateOfBirth属性,那么我能绑定什么?当一个属性发生变化时,我将如何执行验证,以及如何从中更新Person.DateOfBirth?

  • 我应该使用MultiValueConverter吗?如果是,我该如何申报?我习惯将VM中的许多属性MultiBinding到VW中的单个属性,但现在我需要将ViewModel中的单个属性映射到View中的许多属性。

  • BindingGroup怎么样?这是一个很好的用例吗?

1 个答案:

答案 0 :(得分:0)

您可以将DateOfBirth的不同属性绑定到多个TextBox,即

<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=""../>

您可以为这些文本框单独指定验证规则,如IsValidDayRule,IsValidMonthRule等。此外,如果您不想使用ValidationRules,则可以在viewmodel中进行验证。我认为这是一种更清洁的方法。

您还可以在评论中为Will创建一个usercontrol。这也是一种更好的方法。