첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170

TestProject.zip
다운로드

▶ MainWindow.xaml

<Window x:Class="TestProject.Views.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:prism="http://prismlibrary.com/"
    prism:ViewModelLocator.AutoWireViewModel="True"
    Width="800"
    Height="600"
    Title="DelegateCommand 클래스 : 대리자 명령 사용하기"
    FontFamily="나눔고딕코딩"
    FontSize="16">
    <StackPanel
        HorizontalAlignment="Center"
        VerticalAlignment="Center">
        <CheckBox
            Margin="10"
            Padding="5"
            IsChecked="{Binding IsEnabled}"
            VerticalContentAlignment="Center"
            Content="Can Execute Command" />
        <Button
            Margin="10"
            Padding="5"
            Command="{Binding ExecuteDelegateCommand}"
            Content="DelegateCommand" />
        <Button
            Margin="10"
            Padding="5"
            Command="{Binding ObservePropertyDelegateCommand}"
            Content="DelegateCommand ObservesProperty" />
        <Button
            Margin="10"
            Padding="5"
            Command="{Binding ObserveCanExecuteDelegateCommand}"
            Content="DelegateCommand ObservesCanExecute" />
        <Button
            Margin="10"
            Padding="5"
            Command="{Binding ExecuteGenericDelegateCommand}"
            CommandParameter="Passed Parameter"
            Content="DelegateCommand Generic" />
        <TextBlock
            Margin="10" 
            Padding="5"
            FontSize="22"
            Text="{Binding UpdateText}" />
    </StackPanel>
</Window>

 

▶ MainWindow.xaml.cs

using System.Windows;

namespace TestProject.Views
{
    /// <summary>
    /// 메인 윈도우
    /// </summary>
    public partial class MainWindow : Window
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MainWindow()

        /// <summary>
        /// 생성자
        /// </summary>
        public MainWindow()
        {
            InitializeComponent();
        }

        #endregion
    }
}

 

▶ MainWindowViewModel.cs

using System;

using Prism.Commands;
using Prism.Mvvm;

namespace TestProject.ViewModels
{
    /// <summary>
    /// 메인 윈도우 뷰 모델
    /// </summary>
    public class MainWindowViewModel : BindableBase
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// 이용 가능 여부
        /// </summary>
        private bool isEnabled;

        /// <summary>
        /// 업데이트 텍스트
        /// </summary>
        private string updateText;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 이용 가능 여부 - IsEnabled

        /// <summary>
        /// 이용 가능 여부
        /// </summary>
        public bool IsEnabled
        {
            get
            {
                return this.isEnabled;
            }
            set
            {
                SetProperty(ref this.isEnabled, value);

                ExecuteDelegateCommand.RaiseCanExecuteChanged();
            }
        }

        #endregion
        #region 업데이트 텍스트 - UpdateText

        /// <summary>
        /// 업데이트 텍스트
        /// </summary>
        public string UpdateText
        {
            get
            {
                return this.updateText;
            }
            set
            {
                SetProperty(ref this.updateText, value);
            }
        }

        #endregion

        #region 실행 대리자 명령 - ExecuteDelegateCommand

        /// <summary>
        /// 실행 대리자 명령
        /// </summary>
        public DelegateCommand ExecuteDelegateCommand { get; private set; }

        #endregion
        #region 속성 관찰 대리자 명령 - ObservePropertyDelegateCommand

        /// <summary>
        /// 속성 관찰 대리자 명령
        /// </summary>
        public DelegateCommand ObservePropertyDelegateCommand { get; private set; }

        #endregion
        #region 실행 가능 여부 관찰 대리자 명령 - ObserveCanExecuteDelegateCommand

        /// <summary>
        /// 실행 가능 여부 관찰 대리자 명령
        /// </summary>
        public DelegateCommand ObserveCanExecuteDelegateCommand { get; private set; }

        #endregion
        #region 일반 실행 대리자 명령 - ExecuteGenericDelegateCommand

        /// <summary>
        /// 일반 실행 대리자 명령
        /// </summary>
        public DelegateCommand<string> ExecuteGenericDelegateCommand { get; private set; }        

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MainWindowViewModel()

        /// <summary>
        /// 생성자
        /// </summary>
        public MainWindowViewModel()
        {
            ExecuteDelegateCommand           = new DelegateCommand(Execute, CanExecute);
            ObservePropertyDelegateCommand   = new DelegateCommand(Execute, CanExecute).ObservesProperty(() => IsEnabled);
            ObserveCanExecuteDelegateCommand = new DelegateCommand(Execute).ObservesCanExecute(() => IsEnabled);
            ExecuteGenericDelegateCommand    = new DelegateCommand<string>(ExecuteGeneric).ObservesCanExecute(() => IsEnabled);
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region 실행하기 - Execute()

        /// <summary>
        /// 실행하기
        /// </summary>
        private void Execute()
        {
            UpdateText = $"Updated : {DateTime.Now}";
        }

        #endregion
        #region 실행 가능 여부 구하기 - CanExecute()

        /// <summary>
        /// 실행 가능 여부 구하기
        /// </summary>
        /// <returns>실행 가능 여부</returns>
        private bool CanExecute()
        {
            return IsEnabled;
        }

        #endregion
        #region 일반 실행하기 - ExecuteGeneric(parameter)

        /// <summary>
        /// 일반 실행하기
        /// </summary>
        /// <param name="parameter">매개 변수</param>
        private void ExecuteGeneric(string parameter)
        {
            UpdateText = parameter;
        }

        #endregion
    }
}

 

▶ MainApplication.xaml

<prism:PrismApplication x:Class="TestProject.MainApplication"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:prism="http://prismlibrary.com/">
</prism:PrismApplication>

 

▶ MainApplication.xaml.cs

using System.Windows;

using Prism.Ioc;
using Prism.Unity;

using TestProject.Views;

namespace TestProject
{
    /// <summary>
    /// 메인 애플리케이션
    /// </summary>
    public partial class MainApplication : PrismApplication
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Protected

        #region 쉘 생성하기 - CreateShell()

        /// <summary>
        /// 쉘 생성하기
        /// </summary>
        /// <returns>쉘</returns>
        protected override Window CreateShell()
        {
            return Container.Resolve<MainWindow>();
        }

        #endregion
        #region 타입 등록하기 - RegisterTypes(containerRegistry)

        /// <summary>
        /// 타입 등록하기
        /// </summary>
        /// <param name="containerRegistry">컨테이너 레지스트리 인터페이스</param>
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
        }

        #endregion
    }
}
728x90
반응형
그리드형
Posted by 사용자 icodebroker
TAG , , ,

댓글을 달아 주세요