gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:36:44 27 4
gpt4 key购买 nike

关闭。这个问题需要更多 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com