KeiStory

WPF PriorityBinding

2024. 10. 14. 22:46

WPF PriorityBinding

 

PriorityBinding 은 바인딩 시 한 곳에 여러 필드를 우선순위에 따라 나타내고자 할 때 쓰입니다.

예를 들면 어떤 검사 결과 값을 표시할때 처음에는 검사중 - 결과 산출중 - 결과 를 표시할 때 사용할 수 있습니다.

AsyncSampleData.cs

using System.Threading;

namespace Wpf.Test
{
    public class AsyncSampleData
    {
        private string fastValue;
        private string slowerValue;
        private string slowestValue;

        public string FastValue
        {
            get { return fastValue; }
            set { fastValue = value; }
        }

        public string SlowerValue
        {
            get
            {
                Thread.Sleep(3000);

                return this.slowerValue;
            }
            set
            {
                this.slowerValue = value;
            }
        }

        public string SlowestValue
        {
            get
            {
                Thread.Sleep(5000);

                return this.slowestValue;
            }
            set
            {
                this.slowestValue = value;
            }
        }
    }
}

FastValue 가 처음에 표시될 값이며 그다음으로 SlowerValue, SlowestValue 값이 표시되도록

Thread.Sleep을 하였습니다.

MainWindow.xaml

<Window
    x:Class="Wpf.Test.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:Wpf.Test"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Window.Resources>
        <local:AsyncSampleData
            x:Key="AsyncData"
            FastValue="검사중..(Fast Value)"
            SlowerValue="결과 산출중..(Slower Value)"
            SlowestValue="결과(합격!) (Slowest Value)" />
    </Window.Resources>

    <StackPanel>
        <StackPanel
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            DataContext="{Binding Source={StaticResource AsyncData}}">
            <TextBlock
                Margin="10"
                HorizontalAlignment="Center"
                FontSize="18"
                FontWeight="Bold">
                Priority Binding
            </TextBlock>
            <TextBlock
                Width="200"
                HorizontalAlignment="Center"
                Background="LightGray"
                FontWeight="Bold"
                TextAlignment="Center">
                <TextBlock.Text>
                    <PriorityBinding FallbackValue="Default Value">
                        <Binding IsAsync="True" Path="SlowestValue" />
                        <Binding IsAsync="True" Path="SlowerValue" />
                        <Binding Path="FastValue" />
                    </PriorityBinding>
                </TextBlock.Text>
            </TextBlock>
        </StackPanel>
    </StackPanel>
</Window>

MainWindow.xaml.cs

using System.Windows;

namespace Wpf.Test
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}


결과
 

[Source]

https://github.com/kei-soft/KJunBlog/tree/master/Wpf.Test

 

GitHub - kei-soft/KJunBlog

Contribute to kei-soft/KJunBlog development by creating an account on GitHub.

github.com


참고
https://learn.microsoft.com/ko-kr/dotnet/desktop/wpf/data/how-to-implement-prioritybinding?view=netframeworkdesktop-4.8

 

방법: PriorityBinding 구현 - WPF .NET Framework

PriorityBinding을 사용하여 가장 높은 우선 순위에서 가장 낮은 우선 순위로 정렬된 바인딩 목록을 정의하는 방법을 알아봅니다.

learn.microsoft.com

 

 

 

반응형

'코딩 > WPF' 카테고리의 다른 글

WPF ColorSlider 만들기  (0) 2024.10.07
WPF Popup Drag Move 처리하기  (0) 2024.10.07
WPF Parent Binding  (0) 2024.10.06
WPF Font 적용하기  (1) 2024.10.01
WPF Freezable  (1) 2024.09.27

공유하기

facebook twitter kakaoTalk kakaostory naver band