Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
PriorityBinding в Windows Presentation Foundation (WPF) работает путем указания списка привязок. Список привязок упорядочен от высшего приоритета до самого низкого приоритета. Если привязка с наивысшим приоритетом успешно возвращает значение при обработке, то в списке никогда не требуется обрабатывать другие привязки. Это может быть так, что для оценки привязки с наивысшим приоритетом требуется много времени, следующий самый высокий приоритет, возвращающий значение успешно, будет использоваться до тех пор, пока привязка более высокого приоритета не возвращает значение успешно.
Пример
Чтобы продемонстрировать работу PriorityBinding, объект AsyncDataSource был создан со следующими тремя свойствами: FastDP, SlowerDPи SlowestDP.
Метод доступа FastDP возвращает значение элемента данных _fastDP.
Гет-аксессор SlowerDP ожидает 3 секунды, прежде чем вернуть значение элемента данных _slowerDP.
Аксессор get SlowestDP задерживается на 5 секунд, прежде чем вернуть значение элемента данных _slowestDP.
Замечание
Этот пример предназначен только для демонстрационных целей. Рекомендации .NET предостерегают от создания свойств, которые на порядки величины медленнее, чем наборы полей. Дополнительные сведения см. в разделе выбор между свойствами и методами.
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; }
}
}
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
Свойство 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 отображает значение "Быстрое значение".
Через 3 секунды свойство SlowerDP возвращает значение "Замедленное значение". Затем в TextBlock отображается значение "Более медленное значение".
Через 5 секунд свойство SlowestDP возвращает значение "Самое медленное значение". Эта привязка имеет наивысший приоритет, так как указана первой. Теперь TextBlock отображает значение "Самое медленное значение".
Для получения информации о том, что считается успешным возвращаемым значением привязки, см. PriorityBinding.
См. также
.NET Desktop feedback