UserControl не должен устанавливать свой собственный DataContext, потому что это нарушает любые привязки на основе DataContext его свойств зависимостей.Вместо этого используйте привязку RelativeSource в ее XAML:
<UserControl ...>
<Grid>
<TextBox Text="{Binding Value,
RelativeSource={RelativeSource AncestorType=UserControl}}"/>
</Grid>
</UserControl>
Если вы хотите обновить свойство Value
во время ввода в TextBox, также установите следующее:
<TextBox Text="{Binding Value,
RelativeSource={RelativeSource AncestorType=UserControl},
UpdateSourceTrigger=PropertyChanged}"/>
Если вы также хотите ввести в Control2, сделайте привязку значения TwoWay:
<local:Control2 Value="{Binding ElementName=Control1, Path=Value, Mode=TwoWay}"/>
или сделайте свойство Value связывать TwoWay по умолчанию:
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register(
nameof(Value), typeof(string), typeof(Control2),
new FrameworkPropertyMetadata(
null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));