在 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 });
我是 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 });