기술나눔

WPF Prism Framework 복합 명령 복합 명령

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

목적

복합 명령은 등록된 여러 명령을 트리거할 수 있으며 동시에 여러 명령을 실행할 수 있습니다. 모두 저장과 같은 비즈니스 요구 사항을 달성할 수 있습니다.

성취하다

1. ICompositeCommands 인터페이스 및 CompositeCommands 구현 클래스 생성

Prism에 제공된 CompositeCommand 객체를 ICompositeCommands 인터페이스와 ApplicationCommands 구현 클래스로 래핑합니다.

 public interface IApplicationCommands
    {
        CompositeCommand SaveCommand { get; }
    }

    public class ApplicationCommands : IApplicationCommands
    {
        private CompositeCommand _saveCommand = new CompositeCommand();
        public CompositeCommand SaveCommand
        {
            get { return _saveCommand; }
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2. IOC에 복합 명령 등록
App.xaml 배경 코드에서 IOC 등록 수행

 protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
   containerRegistry.RegisterSingleton<IApplicationCommands, ApplicationCommands>();
}
  • 1
  • 2
  • 3
  • 4

3. ViewModel에서 복합 명령 정의
ViewModel에서 복합 명령을 정의하고 해당 명령을 뷰 레이어에 바인딩합니다.
뷰모델:

  private IApplicationCommands _applicationCommands;
        public IApplicationCommands ApplicationCommands
        {
            get { return _applicationCommands; }
            set { SetProperty(ref _applicationCommands, value); }
        }

        public MainWindowViewModel(IApplicationCommands applicationCommands)
        {
            ApplicationCommands = applicationCommands;
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

보다:

 <Button Content="Save" Margin="10" Command="{Binding ApplicationCommands.SaveCommand}"/>
  • 1

4. 복합 명령을 다른 여러 위치의 명령에 등록합니다.

 public TabViewModel(IApplicationCommands applicationCommands)
  {
    _applicationCommands = applicationCommands;

    UpdateCommand = new DelegateCommand(Update).ObservesCanExecute(() => CanUpdate);

    _applicationCommands.SaveCommand.RegisterCommand(UpdateCommand);
}
 
private void Update()
{
  UpdateText = $"Updated: {DateTime.Now}";
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

이런 방식으로 복합 명령 ApplicationCommands.SaveCommand가 트리거되면 등록된 모든 명령이 트리거됩니다.