在 ViewModel 中调用时如何在不提供参数的情况下执行带参数的按钮命令?

How to execute Button Command with Parameter without providing the Parameter when called in the ViewModel?

我是 MVVM 模式的新手,我只是想问一下什么是“单击”或执行按钮命令的最佳方式,该按钮命令具有来自 ViewModel 的 contentdialog 命令参数。

示例代码: 查看

<Button Command="{x:Bind ViewModel.OpenContentDialog}" CommandParameter="{Binding ElementName=DialogBox}" Grid.Row="0" Grid.Column="3">Open Dialog</Button>

<ContentDialog x:Name="DialogBox"
           PrimaryButtonText="OK" IsPrimaryButtonEnabled="{Binding PrimaryButtonEnabled}"
           CloseButtonText="Cancel">
                                <ContentDialog.TitleTemplate>
                                    <DataTemplate>
                                        <StackPanel Orientation="Horizontal">
                                            <TextBlock Text="Dialog"/>
                                        </StackPanel>
                                    </DataTemplate>
                                </ContentDialog.TitleTemplate>
...

视图模型

 public RelayCommand<object> OpenContentDialog => new RelayCommand<object>((dialog) => { SortDialog(dialog); });

我想在另一个 ViewModel 方法中调用 OpenContentDialog 命令,如下所示:

OpenContentDialog.Execute(); //needs the parameter

我试过将实际的 ContentDialog 作为 ViewModel 对象传递,它有效,但我不确定这是否违反了 MVVM 模式。

如果命令希望将 ContentDialog 作为参数传递,您的两个选择是在调用 Execute 之前以编程方式创建这样的 ContentDialog 或获取对一个已经存在的对话框:

OpenContentDialog.Execute(
    new ContentDialog() { PrimaryButtonText = "OK", IsPrimaryButtonEnabled = true });