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,虽然只注册了一个命令。但这个命令应用于多个实例的时候,在每个实例上都会起使用。

 

posted @ 2021-06-08 10:41  cbaa  阅读(122)  评论(0编辑  收藏  举报