Получите значение от DataContext до MarkupExtension

На unix.stackexchange.com был задан похожий вопрос, и пользователь manatwork предложил перекодировать, что очень хорошо помогает.

Я использую его для преобразования ucs-2 в utf-8 вместо

recode ucs-2..utf-8 *.txt
5
задан Athari 18 February 2014 в 16:49
поделиться

2 ответа

Вы можете связать событие с событием Loaded или Initialized на странице из ваших markupextensions, возможно. Или, возможно, вы могли бы поместить свое расширение разметки в файл XAML после упоминания Foo.Document.

Спасибо, Роб Релиа Команда WPF / XAML мой блог

1
ответ дан 14 December 2019 в 04:46
поделиться

Метод ProvideValue вызывается дважды, один раз, когда XAML оценивается парсером, и один раз, когда загружаются значения. При первом вызове targetObject - это просто некий фиктивный объект SharedDP, а не объект, к которому применяется расширение markupextension. Вам нужно пропустить этот первый вызов и работать только со вторым вызовом. В нашем приложении работает следующий код.

   public override object ProvideValue(IServiceProvider serviceProvider){                                
                var pvt = serviceProvider as IProvideValueTarget;
                if (pvt == null)
                {
                    return null;
                }


                var frameworkElement = pvt.TargetObject as FrameworkElement;
                if (frameworkElement == null)
                {
                    return this;
                }
//.... Code will run once the markup is correctly loaded
 var dataContext = frameworkElement.DataContext; 


    }
7
ответ дан 14 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

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