다음을 통해 공유


방법: PriorityBinding 구현

업데이트: 2007년 11월

바인딩의 목록을 지정하면 WPF(Windows Presentation Foundation)의 PriorityBinding이 작동합니다. 바인딩 목록은 가장 높은 우선 순위에서 가장 낮은 우선 순위로 나열되어 있습니다. 가장 우선 순위가 높은 바인딩이 처리될 때 성공적으로 값이 반환되면 목록의 다른 바인딩을 처리할 필요가 없어집니다. 가장 우선 순위가 높은 바인딩이 계산되는 데 시간이 오래 걸리는 경우 다음으로 우선 순위가 높은 바인딩에서 성공적으로 값이 반환되면 가장 우선 순위가 높은 바인딩이 성공적으로 값이 반환될 때까지 이 바인딩이 사용됩니다.

예제

PriorityBinding이 작동하는 방식을 보여 주기 위해 다음 세 가지 속성을 사용하여 AsyncDataSource 개체를 생성했습니다. FastDP, SlowerDP 및 SlowestDP

FastDP의 get 접근자에서 _fastDP 데이터 멤버의 값을 반환합니다.

SlowerDP의 get 접근자는 _slowerDP 데이터 멤버의 값을 반환하기 전에 3초간 기다립니다.

SlowestDP의 get 접근자는 _slowestDP 데이터 멤버의 값을 반환하기 전에 5초간 기다립니다.

참고

이 예제는 예시 목적으로만 제공됩니다. 필드 집합보다 더 느린 대량 주문인 속성을 정의하는 데 Microsoft .NET 지침을 사용하는 것이 좋습니다. 자세한 내용은 속성과 메서드 간의 선택을 참조하십시오.

Public Class AsyncDataSource
    ' Properties
    Public Property FastDP As String
        Get
            Return Me._fastDP
        End Get
        Set(ByVal value As String)
            Me._fastDP = value
        End Set
    End Property

    Public Property SlowerDP As String
        Get
            Thread.Sleep(3000)
            Return Me._slowerDP
        End Get
        Set(ByVal value As String)
            Me._slowerDP = value
        End Set
    End Property

    Public Property SlowestDP As String
        Get
            Thread.Sleep(5000)
            Return Me._slowestDP
        End Get
        Set(ByVal value As String)
            Me._slowestDP = value
        End Set
    End Property


    ' Fields
    Private _fastDP As String
    Private _slowerDP As String
    Private _slowestDP As String
End Class
public class AsyncDataSource
{
    private string _fastDP;
    private string _slowerDP;
    private string _slowestDP;

    public AsyncDataSource()
    {
    }

    public string FastDP
    {
    get { return _fastDP; }
    set { _fastDP = value; }
    }

    public string SlowerDP
    {
    get
    {
      // This simulates a lengthy time before the
      // data being bound to is actualy available.
      Thread.Sleep(3000);
      return _slowerDP;
    }
    set { _slowerDP = value; }
    }

    public string SlowestDP
    {
    get
    {
      // This simulates a lengthy time before the
      // data being bound to is actualy available.
      Thread.Sleep(5000);
      return _slowestDP;
    }
    set { _slowestDP = value; }
    }
}

Text 속성은 PriorityBinding을 사용하는 위의 AsyncDS에 바인딩됩니다.

<Window.Resources>
  <c:AsyncDataSource SlowestDP="Slowest Value" SlowerDP="Slower Value"
                     FastDP="Fast Value" x:Key="AsyncDS" />
</Window.Resources>
    
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"
  DataContext="{Binding Source={StaticResource AsyncDS}}">
  <TextBlock FontSize="18" FontWeight="Bold" Margin="10"
    HorizontalAlignment="Center">Priority Binding</TextBlock>
  <TextBlock Background="Honeydew" Width="100" HorizontalAlignment="Center">
    <TextBlock.Text>
      <PriorityBinding FallbackValue="defaultvalue">
        <Binding Path="SlowestDP" IsAsync="True"/>
        <Binding Path="SlowerDP" IsAsync="True"/>
        <Binding Path="FastDP" />
      </PriorityBinding>
    </TextBlock.Text>
  </TextBlock>    
</StackPanel>

바인딩 엔진이 Binding 개체를 처리할 때 SlowestDP 속성에 바인딩된 첫 번째 Binding에서 시작합니다. 이 Binding이 처리되면 5초 동안 대기하기 때문에 성공적으로 값이 반환되지 않으므로 다음 Binding 요소가 처리됩니다. 다음 Binding은 3초 동안 대기하기 때문에 값이 성공적으로 반환되지 않습니다. 그런 다음 바인딩 엔진은 FastDP 속성에 바인딩되어 있는 다음 Binding 요소로 이동합니다. 이 Binding은 "Fast Value" 값을 반환합니다. 이제 TextBlock은 "Fast Value" 값을 표시합니다.

3초가 경과되면 SlowerDP 속성이 "Slower Value" 값을 반환합니다. 그런 다음 TextBlock에서 "Slower Value" 값을 표시합니다.

5초가 경과되면 SlowestDP 속성이 "Slowest Value" 값을 반환합니다. 이 바인딩은 맨 처음에 나열되어 있기 때문에 가장 높은 우선 순위를 갖습니다. 이제 TextBlock은 "Slowest Value" 값을 표시합니다.

바인딩에서 성공적인 반환 값으로 간주되는 내용에 대한 자세한 내용은 PriorityBinding을 참조하십시오.

전체 샘플을 보려면 PriorityBinding을 사용한 바인딩 샘플을 참조하십시오.

참고 항목

개념

데이터 바인딩 개요

참조

Binding.IsAsync

기타 리소스

데이터 바인딩 샘플

데이터 바인딩 방법 항목