Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Построение вкладки Data Binding
В окне Document Outline замените элемент управления
GridStackPanel<TabItem x:Name="tabDataBinding" Header="Data Binding"> <StackPanel Width="250"> <Label Content="Move the scroll bar to see the current value"/><b> <!-- Значение линейки прокрутки является источником этой привязки данных --></b> <ScrollBar x:Name="mySB" Orientation="Horizontal" Height="30" Minimum = "1" Maximum = "100" LargeChange="1" SmallChange="1"/><b> <!-- Содержимое метки будет привязано к линейке прокрутки --></b> <Label x:Name="labelSBThumb" Height="30" BorderBrush="Blue" BorderThickness="2" Content = "0"/> </StackPanel></TabItem>Обратите внимание, что объект
ScrollBarmySB1100LabelContentLabel"0"Установка привязки данных
Механизмом, обеспечивающим определение привязки в разметке XAML, является расширение разметки
{Binding}ContentLabellabelSBThumb<Label x:Name="labelSBThumb" Height="30" BorderBrush="Blue" BorderThickness="2" Content = "{Binding Path=Value, ElementName=mySB}"/>Обратите внимание на значение, присвоенное свойству
ContentLabel{Binding}ElementNameScrollBarPathValueЕсли вы запустите программу снова, то обнаружите, что содержимое метки обновляется на основе значения линейки прокрутки по мере перемещения ползунка.
Свойство DataContext
Для определения операции привязки данных в XAML может использоваться альтернативный формат, при котором допускается разбивать значения, указанные расширением разметки
{Binding}DataContext<b><!-- Разбиение объекта и значения посредством DataContext --></b><Label x:Name="labelSBThumb" Height="30" BorderBrush="Blue" BorderThickness="2" DataContext = "{Binding ElementName=mySB}" Content = "{Binding Path=Value}" />В текущем примере вывод будет идентичным. С учетом этого вполне вероятно вас интересует, в каких случаях необходимо устанавливать свойство
DataContextПодобным образом можно легко устанавливать один и тот же источник данных для семейства элементов управления, не повторяя избыточные фрагменты XAML-разметки
"{Binding ElementName=X, Path=Y}"StackPanelButton<Button Content="Click" Height="200"/>Чтобы сгенерировать привязки данных для множества элементов управления, вы могли бы применить Visual Studio, но взамен введите модифицированную разметку в редакторе XAML:
<b><!-- Обратите внимание, что StackPanel устанавливает</b><b> свойство DataContext --></b><StackPanel Background="#FFE5E5E5" DataContext = "{Binding ElementName=mySB}"> ...<b> <!-- Теперь оба элемента пользовательского интерфейса работают</b><b> со значением линейки прокрутки уникальными путями --></b> <Label x:Name="labelSBThumb" Height="30" BorderBrush="Blue" BorderThickness="2"