Prism Sample 12-UsingCompositeCommands
本例中,主页是一个按钮,绑定了一个复合命令,然后下面一个TabControl
<Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Button Content="Save" Margin="10" Command="{Binding ApplicationCommands.SaveCommand}"/> <TabControl Grid.Row="1" Margin="10" prism:RegionManager.RegionName="ContentRegion" /> </Grid>
然后构建一个视图及ViewModel,VM中建立一个命令,用于更新TabView的内容。关键是,这个命令注册成为复合命令的子命令
public TabViewModel(IApplicationCommands applicationCommands) { _applicationCommands = applicationCommands; UpdateCommand = new DelegateCommand(Update).ObservesCanExecute(() => CanUpdate); _applicationCommands.SaveCommand.RegisterCommand(UpdateCommand); }
最后,将TabView 的三个实例依次添加到ContentRegion
public void OnInitialized(IContainerProvider containerProvider) { var regionManager = containerProvider.Resolve<IRegionManager>(); IRegion region = regionManager.Regions["ContentRegion"]; var tabA = containerProvider.Resolve<TabView>(); SetTitle(tabA, "Tab A"); region.Add(tabA); var tabB = containerProvider.Resolve<TabView>(); SetTitle(tabB, "Tab B"); region.Add(tabB); var tabC = containerProvider.Resolve<TabView>(); SetTitle(tabC, "Tab C"); region.Add(tabC); }
然后我们看到,在每个TabView中的命令,只更新自己的View。而复合命令,更新了所有的View,虽然只注册了一个命令。但这个命令应用于多个实例的时候,在每个实例上都会起使用。