如何在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 });

如果你想要mvvm和winui 3,有一个很好的如何找到https://xamlbrewer.wordpress.com/2022/02/07/building-a-master-detail-page-with-winui-3-and-mvvm/

它包含用于添加、删除或编辑的社区工具包图标。你可能也会喜欢他在winui 3中的其他帖子和例子

最新更新