这是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 不是要从视图中消除代码,主要是要分离关注点。