2011-06-18 57 views
0

我正在用WPF和MVVM构建LOB应用程序。当用户需要插入客户端详细信息时,他可以从多个窗口(这些窗口都是通过绑定设置的可见性属性的用户控件,因此他一次只能看到一个)执行此操作。使用MVVM更改父容器的可见性更改的TextBox.Text

的问题是,所有的TextBox控件保持可见性的变化之间的文本值(折叠< - >可见的),我想将它们重置。 以文本框样式创建触发器不起作用(但没有错误或任何内容)。

我应该怎么做,以保持与MVVM模式的关系?

我想用ObjectDataProvider的呼叫正在使用反射的方法和设置每个TextBox.Text价值。这个objectdataprovider将在StackPanel(容器)风格中设置为触发器。

回答

0

如果我正确认识你,你想达到什么是一个向导。当用户单击下一步时,当前用户控件将被隐藏,并显示下一个用户控件。

既然你做MVVM,我希望每个TextBox.Text被绑定到视图模型的属性。如果这是真的,那么你就不需要使用触发器。您应该做的就是在将用户控件的可见性设置为Visible之前将每个属性设置为空字符串。

例如,如果用户点击下一步,并在下一个屏幕中显示是Screen3,则应该设置Screen3ViewModel所有属性被用来填充文本字段(如NameAddressOccupation)至空的字符串。

您的文本框应该是这个样子:

<TextBox Text={Binding Name} /> 
<TextBox Text={Binding Address} /> 
<TextBox Text={Binding Occupation} /> 

换句话说,千方百计通过代码,而不是标记。

请注意,您需要确保您的视图模型实现INotifyPropertyChanged,以便绑定引擎知道在更改视图模型中的属性时更新文本字段。

+0

它不是一个向导。我只是使用不同的用户控件来插入值。但功能与您所描述的相同。用户控件可见性的逻辑是在不同的视图模型上,所以我仍然必须使用反射。我会尝试使用这两种方法,并查看使用较少代码的情况。谢谢。 – amb

+0

我已经结束了使用按钮来显式重置字段。即使所有设置都正确,设置视图模型属性的值也不起作用。 – amb