【发布时间】:2012-03-07 22:40:22
【问题描述】:
是否可以使用 Prism 从 WPF 应用程序中的不同 ViewModel 以某种方式执行一个命令?
让我解释一下我的意思。
我有 MainMenuViewModel 类:
public class MainMenuViewModel
{
private ICommand _aboutCommand;
public ICommand AboutCommand
{
get
{
if (_aboutCommand == null)
{
_aboutCommand = new DelegateCommand(() =>
{ MessageBox.Show("About menu item clicked!"); });
}
return _aboutCommand;
}
}
}
还有这个模型的视图:
<Menu IsMainMenu="True">
<MenuItem Header="Nápověda">
<MenuItem Header="O Aplikaci" x:Name="About"
Command="{Binding AboutCommand}" />
</MenuItem>
</Menu>
应用程序中有另一个模块,它应该以相同的行为执行命令(甚至可能更好 - 相同的命令):
public class MunisatorViewModel
{
private ICommand _aboutCommandInAnotherModule;
public ICommand AboutCommandInAnotherModule
{
get
{
if (_aboutCommandInAnotherModule== null)
{
_aboutCommandInAnotherModule= new DelegateCommand(() =>
{ MessageBox.Show("About menu item clicked!"); });
}
return _aboutCommandInAnotherModule;
}
}
}
这个模块有视图:
<StackPanel Background="White" HorizontalAlignment="Center" VerticalAlignment="Top">
<Button cmd:Click.Command="{Binding AboutCommandInAnotherModule}">About</Button>
</StackPanel>
是否可以避免重复代码?
附:我知道,我可以为这两个 ViewModel 创建基类并在那里描述这个命令,但问题是,一些 ViewModel 已经有不同的基类。
【问题讨论】: