Пути привязки по умолчанию коренятся в DataContext.Но вы хотите связать со свойствами, определенными в UserControl.Таким образом, вы должны как-то перенаправить их.Обычно я просто делаю это с помощью ElementName
.
<UserControl x:Class="WpfApplication1.BoxPanel"
x:Name="BoxPanelRoot"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Height="50" Width="90">
<Border Background="Blue">
<StackPanel>
<TextBlock Text="{Binding Number, ElementName=BoxPanelRoot}" />
<Label Content="{Binding Text, ElementName=BoxPanelRoot}" />
</StackPanel>
</Border>
Сначала это кажется немного странным и несколько раздражающим для перенаправления привязок, подобных этому, но это предпочтительнее, чем другие методы, которые используют DataContext в UserControl,Если вы блокируете DataContext, скажем, устанавливая его в корень UserControl, вы фактически заблокировали лучший способ передачи данных в UserControl.
Практическое правило: при связывании в UserControl оставляйте DataContext в покое, если только вы явно не связываетесь с данными , переданными UserControl.