我使用MVVM模式开发应用程序。在我的viewmodel项目中,我有自定义Command。在视图我有自定义画布。 我想从我的画布代码后面发出命令,但我不知道如何。
我的应用启动(启动在其他项目中):
private void ApplicationStartup(object sender, StartupEventArgs e)
{
// init main ViewModel
var viewModel = new MainViewModel(Container);
// init and show window
var mainWindow = new MainWindow();
mainWindow.Show();
mainWindow.DataContext = viewModel;
}
我不想在View中引用ViewModel,因为我需要引用ViewModel中的View。
谢谢!
答案 0 :(得分:1)
通常这样做的方法是在CustomCanvas类中实现自己的COMMAND。之后,将该命令绑定到viewmodel中的命令处理程序。
就像使用按钮一样:
<Button
Command="{Binding YourVmCommand}"
/>
有道理吗?
要实现此类功能,您需要破解ButtonBase.cs并查看它是如何完成的。 涉及的代码很多,但这个想法非常简单。
1)在视图中创建新属性。
public ICommand Command { get; set; }
2)在XAML中绑定它
3)在需要时在View中执行。
if(Command != null && Command.CanExecute(parameter))
Command.Execute(parameter);