c# - 使用 Button_Click 事件使用 MVVM 更改文本框内容

标签 c# wpf mvvm

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

7年前关闭。




Improve this question




我什至不知道这是否是正确的标题,但无论如何。我正在从 WinForms 切换并尝试学习 WPF 和 MVVM 方法。

我有一个自定义类,Incident ,用于存储有关我的团队必须响应的事件的数据。我正在构建一个 View 来向用户显示该类实例中的数据,并允许该用户对其进行操作。有几条DateTime需要显示的数据 - Start , End , Notification_Received , Actions_Taken .我需要一个小按钮来放置 DateTime.Now进入每个关联的 TextBox以及更改当前加载的 Incident 实例的基础值类(class)。

我试图弄清楚如何做到这一点。使用 WinForms,我只需设置 TextBox.TextIncident.Start (等)到DateTime.Now都在同一个Button_Click函数,但我对 MVVM 的理解是我不应该这样做,而是应该绑定(bind) TextBox到 VM 并更新 VM 的值。

这就是我卡住的地方。我很确定我擅长如何进行绑定(bind),但不是我从 Button_Click 更改 VM 值的部分。功能。请协助?

最佳答案

你是对的 - View 模型应该控制更改,并且文本框应该通过绑定(bind)更新。

在 MVVM 模式中,很少使用代码隐藏。而不是 Button_Click方法,你需要一个命令绑定(bind):

<Button Command="{Binding SetAllDatesToNowCommand}"/>

该命令将在按下按钮时执行。 SetAllDatesToNowCommand是一个命令处理程序 - 它应该是 ICommand您的 View 模型上的属性:
public ICommand SetAllDatesToNowCommand { get; private set; }

我一般倾向于使用RelayCommand来自 MVVM Light Toolkit创建命令处理程序,因为语法干净且非常简单。命令处理程序在您的 View 模型的构造函数中初始化。传递给 RelayCommand 的处理程序方法是您应该在所选 Incident 上设置属性的位置目的:
public YourViewModel()
{
    this.SetAllDatesToNowCommand =
        new RelayCommand(this.ExecuteSetAllDatesToNowCommand);
}

...

public void ExecuteSetAllDatesToNowCommand()
{
    this.selectedIncident.Start = DateTime.Now;
    // etc.
}

如果您的文本框上的绑定(bind)设置正确,并且正在设置的属性正在触发适当的PropertyChanged事件,它们应该在命令执行方法中设置属性时更新。

但是,我建议您应该有一个 Incident 的 View 模型。 ,它实现了 INotifyPropertyChanged界面。上面概述的命令将是该 View 模型的属性。例如,设置 Start该 View 模型上的属性应设置 Incident 上的属性object 它是(“模型”对象)的 View 模型,还应该引发 PropertyChanged事件。否则,您的 Incident类必须实现 INotifyPropertyChanged ,模型和 View 模型类之间的界限变得不那么清晰了。

关于c# - 使用 Button_Click 事件使用 MVVM 更改文本框内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24357140/

相关文章:

c# - 如何在网格单击时显示子窗口(使用 mvvm 方法)

wpf - 什么 MVVM 框架适合?

c# - 当用户在文本框中输入字符时通知 ViewModel

c# - 在 MVC 中删除浏览器自动完成

c# - TryReset CancellationSource .NET 标准

c# - 如何更改 Asp.NET MVC 中的 Controller 命名约定?

wpf - INotifyPropertyChanged 不更新值转换器

c# - UserControl 上的 SizeToContent

c# - 在 c# Winforms 中对 DataGridview 进行分组

c# - 如何绑定(bind)到 WPF 集合中的集合