如何从 ViewModel 一次清除 WPF 中的所有控件?

Posted

技术标签:

【中文标题】如何从 ViewModel 一次清除 WPF 中的所有控件?【英文标题】:How to clear all the controls at one time in WPF from ViewModel? 【发布时间】:2022-01-20 21:13:10 【问题描述】:

如果有任何方法可以一次清除 WPF 中的所有控件,请指导我。

问题:我有一个包含 textboxesDatagrids 等的窗口。所以在我的工作完成后,我需要清除所有控件.试想一下,完成后的注册表单我需要一份新副本以进行下一次注册。 那么如何从 ViewModel 中做到这一点..?

现在我正在一个一个方法中清除一个控件。 但我想知道是否有任何有效的方法来做到这一点。

【问题讨论】:

将它们全部绑定到一个视图模型的属性。新建另一个实例并将 datacontext 设置为该实例。 好的,但是如何销毁旧实例。让垃圾收集器处理什么 从太空中核弹它。这是唯一确定的方法。或者。如果您没有硬引用来保持 gc 一直存在,您可以只依靠 gc。 好的,让我试试..谢谢你的建议。 【参考方案1】:

如果您将ICommandBinding 一起使用,您可以将所有属性设置为默认值:

ViewModel:

public string Text  get => _text; set => SetProperty(_ref _text, value);  //binding to control in UI

public int SmthIntProperty  get => _smthInt; set => SetProperty(_ref _smthInt, value);  //binding to control in UI

public Command ExampleCommand

   get => new Command((_) => 
   
      //smth code

      Text = string.Empty;
      SmthIntProperty = 0;
   )

【讨论】:

以上是关于如何从 ViewModel 一次清除 WPF 中的所有控件?的主要内容,如果未能解决你的问题,请参考以下文章

WPF 中的 MVVM - 如何提醒 ViewModel 模型中的变化......或者我应该吗?

Caliburn.Micro-如何从继承的ViewModel在WPF视图中显示多个项目:Conductor 。Collection.AllActive

WPF 将 UI 事件绑定到 ViewModel 中的命令

从 ViewModel WPF 更新 XAML 中的 ComboBox ObservableCollection 绑定

如何在没有代码隐藏的情况下处理 ViewModel 中的 WPF 路由命令?

使用 RelayCommand 从 ViewModel 中清除条目文本