У меня есть UserControl
Мои привязки начинают работать, а затем исчезают, когда я взаимодействую с элементом управления.
<Grid DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type local:MyUserControl}}}">
<StackPanel Orientation="Horizontal">
<TextBox Width="100" Background="Cyan"
Text="{Binding Path=DP_in_UserControl,
FallbackValue='Fallback',
TargetNullValue='TargetNull',
UpdateSourceTrigger=PropertyChanged}"/>
<Label Width="100" Background="Magenta"
Content="{Binding Path=DP_in_UserControl,
FallbackValue='Fallback',
TargetNullValue='TargetNull'}"/>
</StackPanel>
</Grid>
public partial class MyUserControl : UserControl
{
public string DP_in_UserControl
{
get { return (string)GetValue(DP_in_UserControlProperty); }
set { SetValue(DP_in_UserControlProperty, value); }
}
public static readonly DependencyProperty DP_in_UserControlProperty =
DependencyProperty.Register("DP_in_UserControl", typeof(string),
typeof(MyUserControl), new PropertyMetadata("UC Default"));
public MyUserControl()
{
InitializeComponent();
}
}
У меня есть главное окно:
<StackPanel Margin="25">
<local:MyUserControl VerticalAlignment="Top"
DP_in_UserControl="{Binding DP_in_MainWindow}"/>
<Label Background="Yellow"
Content="{Binding DP_in_MainWindow,
FallbackValue='Fallback',
TargetNullValue='TargetNull'}"/>
<Button Content="Change DP__in__MainWindow"
Click="Button_Click"/>
</StackPanel>
public partial class MainWindow : Window
{
public string DP_in_MainWindow
{
get { return (string)GetValue(DP_in_MainWindowProperty); }
set { SetValue(DP_in_MainWindowProperty, value); }
}
public static readonly DependencyProperty DP_in_MainWindowProperty =
DependencyProperty.Register("DP_in_MainWindow", typeof(string),
typeof(MainWindow), new PropertyMetadata("MW Default"));
public MainWindow()
{
DataContext = this;
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e) =>
DP_in_MainWindow = "Changed";
}
Сгенерированное окно начинается с:
Если я введу TextBox на UserControl (голубой), обновятся только метка UserControl (пурпурный):
Если я затем нажму на кнопку, которая изменяет DP_in_MainWindow, обновится только метка, определенная в MainWindow (желтая).
НО, если я перезапущу его и сначала нажму кнопку, все три обновятся правильно:
А затем повторный набор нарушает привязки и обновляет только метку элемента управления:
Что здесь происходит и как мне сделать так, чтобы привязки сохранили свою связь в стиле XAML. Я знаю, что мог бы взломать это вместе в C #, и это большая часть ответов, которые я вижу, но должен быть простой «правильный» способ сделать это.
Я экспериментировал со всевозможными комбинациями шаблонов ControlTemplate и альтернативных привязок по имени и ... просто не нашел правильную комбинацию.