c# - WPF 中的 MVVM 模式是否允许在 XAML 中管理单击事件?
问题描述
事件管理如何使用 MVVM 模式在 WPF 中工作?我真的应该避免使用直接事件管理吗?示例:正在构建这样的视图:
<Grid>
<Button Click="GO_Button_Click" Content="Go" Margin="39,143,503,250"/>
<TextBox x:Name="outputFolder" Margin="321,182,35,211" Text="{Binding outputFolderPath}"/>
</Grid>
有这样的视图模型:
using System.ComponentModel;
using System.Windows;
namespace FirstWpfApp
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window, INotifyPropertyChanged
{
#region variables
public string outputFolderPath { get; set; }
#endregion
#region events
private void GO_Button_Click(object sender, RoutedEventArgs e)
{
outputFolderPath = "Some data";
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(outputFolderPath)));
}
#endregion
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public event PropertyChangedEventHandler PropertyChanged;
}
}
难道我不能更好地实现 MVVM 模式,避免从视图中调用“GO_Button_Click”方法吗?
解决方案
按钮具有“命令”属性,因此您可以将其与实现“ICommand”接口的类绑定。请检查以下文档。ICommand MVVM 实现。
另外,您似乎将 MainWindow 用作DataContext
, 本身。这不是 MVVM 方式。我认为这种方式只是WPF绑定的做法。如果你想实现 MVVM 部分,首先你应该制作ViewModel
代表应用程序领域知识的窗口和一组DataContext
MainWindow 到ViewModel
推荐阅读
- sorting - 如何使用 partial_cmp 进行多重嵌套排序?
- python - 在 MacOS 中更改 Pip 路径
- api - 将 api 响应转换为 Card flutter
- java - 由于 SSL 错误 + Docker 无法连接
- html - 为什么这个网站没有考虑 Wordpress 的自定义 CSS 样式?
- azure - PowerShell 使用 Az.KeyVault 从 Azure Key Vault 导出 Pfx
- python - 如何使用 Python 生成随机的 Decimal128、Decimal256 数字
- java - 创建简单的 HTTP 代理服务器来回复虚假内容,Java
- c# - 我可以在 ASP.NET Core 中使用全局帮助程序吗
- c++ - 元编程中的枚举值与静态常量