مشاركة عبر


كيفية القيام بما يلي: تنفيذ PriorityBinding

PriorityBinding فيWindows Presentation Foundation (WPF) يعمل بواسطة تحديد قائمة من الروابط. ترتيب قائمة الروابط من الأولوية العليا إلى الأولوية الدنيا. إذا كان الربط ذو أولوية أعلى يرجع قيمة بنجاح عندما يتم معالجته, لذلك لا توجد حاجة لمعالجة الروابط الأخرى في القائمة. يمكن أن تكون حالة الربط التي لها أولوية أعلى تأخذ وقتاً طويلاً لتقييمها، الأولوية العليا التالية التي تقوم بإرجاع قيمة بنجاح سيتم استخدامها إلى أن يرجع ربط ذو أولوية أعلى قيمة بنجاح.

مثال

لعرض كيفية PriorityBinding يعمل AsyncDataSource ينشئ كائن بالخصائص الثلاثة التالية: FastDP ، SlowerDP و SlowestDP

get الموصل FastDP يقوم بإرجاع قيمة _fastDP عضو البيانات.

get الموصل SlowerDP ينتظر 3 ثوان قبل إرجاع قيمة _slowerDP عضو البيانات.

get الموصل SlowestDP ينتظر 5 ثوان قبل إرجاع قيمة _slowestDP عضو البيانات.

ملاحظةملاحظة

هذا المثال لأغراض العرض التوضيحي فقط.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 خاصية تربط لأعلاه AsyncDS باستخدام PriorityBinding:

<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 كائنات, يبدأ بأول Binding ، الذي يرتبط ب SlowestDP الخاصية. عند هذه Binding يتم معالجة ، فإنه لا يقوم بإرجاع قيمة بنجاح لأنه في سكون لمدة 5 ثوان, لذلك العنصر التالي Binding يتم معالجته. التالي Binding لا يقوم بإرجاع قيمة بنجاح بسبب حالة السكون لـ "3 ثوان". مشغل الربط ثم يقوم بالانتقال إلى العنصر التالي Binding المنضم إلى FastDP خاصية. هذا Binding يقوم بإرجاع قيمة "Fast Value". TextBlock تعرض الآن قيمة "Fast Value".

بعد انقضاء 3 ثوان SlowerDP الخاصية تقوم بإرجاع القيمة "Slower Value". TextBlock ثم يعرض قيمة "Slower Value".

بعد انقضاء 5 ثوان SlowestDP الخاصية تقوم بإرجاع القيمة "Slowest Value". هذا الربط له أولوية أعلى لأنه سرد أولاً. TextBlock تعرض الآن قيمة Slowest" Value".

راجع PriorityBinding للحصول على معلومات حول ما يعتبر قيمة إرجاع ناجحة من الربط.

راجع أيضًا:

المرجع

Binding.IsAsync

المبادئ

نظرة عامة لربط البيانات

موارد أخرى

المواضيع الإجرائية لربط البيانات