【问题标题】:Change TextBox.Text on parent container's visibility change using MVVM使用 MVVM 更改父容器的可见性更改上的 TextBox.Text
【发布时间】:2011-09-17 16:37:55
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: wpf mvvm textbox visibility


    【解决方案1】:

    如果我对您的理解正确,那么您想要实现的是一个向导。当用户点击 Next 时,当前用户控件被隐藏,下一个用户控件被显示。

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

    例如,如果用户单击下一步,并且要显示的下一个屏幕是Screen3,那么您应该设置Screen3ViewModel 上用于填充文本字段的所有属性(例如NameAddress, Occupation) 清空字符串。

    您的文本框应如下所示:

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

    换句话说,通过代码而不是标记来做所有事情。

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

    【讨论】:

    • 它不是巫师。我只是使用不同的用户控件来插入值。但功能与您描述的相同。用户控件可见性的逻辑在不同的视图模型上,所以我仍然必须使用反射。我将尝试这两种方法,看看用更少的代码有什么用。谢谢。
    • 我最终使用了一个按钮来显式重置字段。即使一切设置正确,也无法为视图模型的属性设置值。
    猜你喜欢
    • 2017-07-09
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2013-04-14
    • 2015-03-14
    • 1970-01-01
    相关资源
    最近更新 更多