sfreaky
@sfreaky
Начинающий веб и софт разработчик

Как настроить свойство зависимости в TabControl + UserControl WPF?

Структура такая: есть 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 первой вкладки
  • Вопрос задан
  • 181 просмотр
Решения вопроса 1
sfreaky
@sfreaky Автор вопроса
Начинающий веб и софт разработчик
Решение такое: не менять DataContext у Control'а. Любое изменение внутри ведёт к поломке привязки.
www.eidias.com/blog/2015/7/16/why-does-the-binding...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы