C#和WPF,当使用mvvm样式和按钮操作作为命令参数时,如何始终在命令参数中创建新对象



这是MainWindow中的xaml wpf:

<Button
                    x:Name="Add_Button"
                    Content="Add Item"
                    VerticalAlignment="Center"
                    Style="{StaticResource ResourceKey=ActionButtonStyle}"
                    Command="{Binding openAddDialogCommand}">
                    <Button.CommandParameter>
                        <local:MyDialog />
                    </Button.CommandParameter>
                </Button>

在这里,MainWindow已经具有具有视图模型的上下文。 openAddDialogCommand是打开它的命令。参数本身将作为IDialogService传递,而不是对话框本身。

现在的问题是,MyDialog是一个窗口,当我关闭它时,窗口无法重新打开,除非它是一个新实例。如何始终返回一个新实例作为参数?我尝试在类中使用MainWindow变量,该变量总是在其getter中生成一个新对象,然后使用绑定到按钮,除非我提出属性更改,否则它根本不起作用,这太复杂了,而且我不想向类添加更多代码MainWindow。有什么简单的方法可以做到这一点吗?

您可以处理 click 事件并以编程方式创建 MyDialog 的新实例,而不是使用命令参数:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var viewModel = DataContext as viewModel:
    viewModel.openAddDialogCommand.Execute(new MyDialog());
}

这只是从同一视图调用完全相同的命令,但使用编程语言(如 C#)而不是使用标记语言(如 XAML)执行此操作会更灵活。

MVVM 不是要从视图中消除代码,主要是要分离关注点。

相关内容

  • 没有找到相关文章

最新更新