Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 更改文本框。父容器上的文本';使用MVVM进行可见性更改_Wpf_Mvvm_Textbox_Visibility - Fatal编程技术网

Wpf 更改文本框。父容器上的文本';使用MVVM进行可见性更改

Wpf 更改文本框。父容器上的文本';使用MVVM进行可见性更改,wpf,mvvm,textbox,visibility,Wpf,Mvvm,Textbox,Visibility,我正在用WPF和MVVM构建一个LOB应用程序。当用户需要插入客户机详细信息时,他可以从多个窗口(这些窗口是通过绑定设置可见性属性的用户控件,因此他一次只能看到一个窗口)插入客户机详细信息 问题是,所有TextBox控件都将其文本值保持在可见性更改(折叠可见)之间,我想重置它们。 在文本框样式中创建触发器不起作用(但没有错误或任何东西) 我应该如何做才能与MVVM模式保持联系 我正在考虑使用ObjectDataProvider调用一个使用反射的方法,并设置每个TextBox.Text值。此obj

我正在用WPF和MVVM构建一个LOB应用程序。当用户需要插入客户机详细信息时,他可以从多个窗口(这些窗口是通过绑定设置可见性属性的用户控件,因此他一次只能看到一个窗口)插入客户机详细信息

问题是,所有TextBox控件都将其文本值保持在可见性更改(折叠可见)之间,我想重置它们。 在文本框样式中创建触发器不起作用(但没有错误或任何东西)

我应该如何做才能与MVVM模式保持联系


我正在考虑使用ObjectDataProvider调用一个使用反射的方法,并设置每个TextBox.Text值。此objectdataprovider将使用StackPanel(容器)样式的触发器进行设置。

如果我理解正确,那么您试图实现的是一个向导。当用户单击“下一步”时,将隐藏当前用户控件,并显示下一个用户控件

由于您正在执行MVVM,我希望每个
TextBox.Text
都绑定到视图模型上的一个属性。如果这是真的,那么就不需要使用触发器。在将用户控件的可见性设置为
Visible
之前,只需将每个属性设置为空字符串

例如,如果用户单击“下一步”,下一个显示的屏幕是
Screen3
,那么您应该将
Screen3ViewModel
上用于填充文本字段的所有属性(例如
Name
Address
ocation
)设置为空字符串

您的文本框应如下所示:

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

换句话说,一切都是通过代码完成的,而不是标记


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

它不是向导。我只是使用不同的用户控件来插入值。但功能与您描述的相同。用户控件可见性的逻辑在不同的viewmodel上,因此我仍然必须使用反射。我将尝试这两种方法,看看用更少的代码做什么。谢谢。我最后使用了一个按钮来显式重置字段。即使所有设置都正确,视图模型属性的设置值也不起作用。