Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Построение вкладки Data Binding
В окне Document Outline замените элемент управления
Grid
StackPanel
<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>
Обратите внимание, что объект
ScrollBar
mySB
1
100
Label
Content
Label
"0"
Установка привязки данных
Механизмом, обеспечивающим определение привязки в разметке XAML, является расширение разметки
{Binding}
Content
Label
labelSBThumb
<Label x:Name="labelSBThumb" Height="30" BorderBrush="Blue" BorderThickness="2"
Content = "{Binding Path=Value, ElementName=mySB}"/>
Обратите внимание на значение, присвоенное свойству
Content
Label
{Binding}
ElementName
ScrollBar
Path
Value
Если вы запустите программу снова, то обнаружите, что содержимое метки обновляется на основе значения линейки прокрутки по мере перемещения ползунка.
Свойство 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}"
StackPanel
Button
<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"