WPF

WPF 중요 메서드 정리

지오준 2023. 11. 18.
반응형

WPF(Windows Presentation Foundation)는 .NET Framework에서 GUI 기반 응용 프로그램을 개발하는 데 사용되는 기술입니다. WPF에서 사용되는 몇 가지 중요한 메서드와 간단한 예제를 제공하겠습니다.

 

1. Dispatcher.Invoke 메서드

WPF에서는 UI 스레드에서만 UI 업데이트를 수행해야 합니다. 이를 위해 Dispatcher.Invoke 메서드를 사용할 수 있습니다.

// 예제: UI 스레드에서 비동기 작업 수행
private void UpdateUI(string message)
{
    Application.Current.Dispatcher.Invoke(() =>
    {
        // UI 업데이트 코드
        StatusLabel.Content = message;
    });
}

 

2. PropertyChanged 이벤트 및 OnPropertyChanged 메서드

데이터 바인딩을 사용하여 UI 요소를 데이터 소스에 연결할 때, 속성 값이 변경될 때마다 PropertyChanged 이벤트를 발생시켜 UI를 업데이트할 수 있습니다.

// 예제: OnPropertyChanged 메서드 활용
public class Person : INotifyPropertyChanged
{
    private string _name;

    public string Name
    {
        get { return _name; }
        set
        {
            if (_name != value)
            {
                _name = value;
                OnPropertyChanged(nameof(Name));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

 

3. Storyboard 및 VisualStateGroup:

애니메이션 및 UI 상태 전환을 관리하기 위해 Storyboard 및 VisualStateGroup을 사용할 수 있습니다.

<!-- 예제: VisualState 및 Storyboard를 사용한 애니메이션 -->
<VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="CommonStates">
        <VisualState x:Name="Normal">
            <Storyboard>
                <DoubleAnimation Storyboard.TargetName="MyElement" Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:1"/>
            </Storyboard>
        </VisualState>
        <VisualState x:Name="MouseOver">
            <Storyboard>
                <DoubleAnimation Storyboard.TargetName="MyElement" Storyboard.TargetProperty="Opacity" To="0.5" Duration="0:0:1"/>
            </Storyboard>
        </VisualState>
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

 

4. CommandBinding 및 ICommand

사용자 인터페이스 요소에 명령을 연결하려면 CommandBinding 및 ICommand를 사용합니다.

// 예제: ICommand 및 CommandBinding을 사용한 명령 처리
public class RelayCommand : ICommand
{
    private readonly Action<object> _execute;
    private readonly Predicate<object> _canExecute;

    public RelayCommand(Action<object> execute, Predicate<object> canExecute = null)
    {
        _execute = execute ?? throw new ArgumentNullException(nameof(execute));
        _canExecute = canExecute;
    }

    public bool CanExecute(object parameter) => _canExecute == null || _canExecute(parameter);

    public void Execute(object parameter) => _execute(parameter);

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }
}

// XAML에서의 사용 예제:
<!-- CommandBinding -->
<Window.CommandBindings>
    <CommandBinding Command="{x:Static local:CustomCommands.MyCommand}" Executed="MyCommand_Executed" CanExecute="MyCommand_CanExecute"/>
</Window.CommandBindings>

<!-- Button에 ICommand 연결 -->
<Button Command="{x:Static local:CustomCommands.MyCommand}" Content="Click me"/>

 

이것은 WPF에서 자주 사용되는 몇 가지 기본 메서드 및 개념에 대한 간단한 예제입니다. WPF는 강력하고 유연한 플랫폼이므로 실제 프로젝트에서는 이러한 개념을 확장하고 조합하여 다양한 요구 사항을 충족시킬 수 있습니다.

 

반응형

댓글