Структура такая: есть TabControl, с таким ContentTemplate
<TabControl.ContentTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" DataContext="{Binding Path=DataContext, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
>
<uc:FormulaEditor FormulaBinding="{Binding CurrentFormula,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
StandardParameters="False"/>
</Grid>
</DataTemplate>
</TabControl.ContentTemplate>
В DataContext окна, где находится TabControl, подаётся ViewModel, где есть свойство, меняющееся в зависимости от выбранной вкладки
public Formula CurrentFormula
{
get => _currentFormula;
set
{
_currentFormula = value;
NotifyPropertyChanged(nameof(CurrentFormula));
}
В UserControl
public static readonly DependencyProperty FormulaBindingProperty =
DependencyProperty.Register(nameof(FormulaBinding), typeof(Formula), typeof(FormulaEditor),
new PropertyMetadata(OnFormulaChanged));
public Formula FormulaBinding
{
get => GetValue(FormulaBindingProperty) as Formula;
set => SetValue(FormulaBindingProperty, value);
}
public FormulaViewModel ViewModel => DataContext as FormulaViewModel;
private static void OnStandardParametersChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var w = d as FormulaEditor;
if (w.ViewModel != null)
w.ViewModel.ShowStandardParameters = (bool)e.NewValue;
}
Проблема такая: всё это работает только при инициализации окна, с первой вкладкой, и при изменении CurrentFormula привязка не обновляется, и на всех вкладках меняется CurrentFormula первой вкладки