首页 > 解决方案 > 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”方法吗?

标签: c#wpfdesign-patternsmvvmdesktop-application

解决方案


按钮具有“命令”属性,因此您可以将其与实现“ICommand”接口的类绑定。请检查以下文档。ICommand MVVM 实现

另外,您似乎将 MainWindow 用作DataContext, 本身。这不是 MVVM 方式。我认为这种方式只是WPF绑定的做法。如果你想实现 MVVM 部分,首先你应该制作ViewModel代表应用程序领域知识的窗口和一组DataContextMainWindow 到ViewModel


推荐阅读