如何将按钮单击事件发送方从代码隐藏切换到 MVVM?

How to switch a button click event sender from code behind to MVVM?

我在代码隐藏中有一个带有 Click 事件的按钮,如下所示:

private void ButtonManager_OnClick(object sender, RoutedEventArgs e)

    {
        var addButton = sender as FrameworkElement;
    }

如果我转到 MVVM 并且没有代码隐藏,我会使用带执行的命令 class,如下所示:

public override void Execute(object? parameter)
    {
      // sender?
    }

我应该如何管理代码隐藏中使用的“发件人作为..”?

您可以使用 CommandParameter 将控件绑定到自身。 但是将 ViewComponent 发送到 ViewModel 并更改它并不是一个好主意。因为在 MVVM 中,View 不应该知道任何有关 View 的信息。如果你想改变视图中的任何东西,你可以在 ViewModel 中定义属性并将它们绑定到单独的视图中。 无论如何,您的问题的解决方案在下面的代码中,但我 不建议这样做 :

示例代码

Xaml:

<Button Command="{Binding Command}" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=.}"/>

ViewModel:

private void Execute(object? obj)
{
   var sender = obj as FrameworkElement;
}