كيفية القيام بما يلي: تنفيذ 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 للحصول على معلومات حول ما يعتبر قيمة إرجاع ناجحة من الربط.