WedX - журнал о программировании и компьютерных науках

WPF - передача параметра из диалогового окна в UserControl

Я использую DependencyProperty для передачи параметров из DialogWindow в UserControl. Я хочу, чтобы этот параметр находился внутри конструктора UserControl, чтобы передать его в модель представления.

Свойство всегда возвращает значение null и никогда не устанавливается.

Код:

Главное окно:

var dialog = new DialogWindow();
dialog.ShowDialog();

DialogWindow.xaml

<TabControl>
    <TabItem Header="Data Source">
        <local:DataSourceView Test="Something" />
    </TabItem>
</TabControl>

DataSourceView.xaml.cs

public static readonly DependencyProperty TestProperty =
    DependencyProperty.Register("Test", typeof(object), typeof(DataSourceView));
public object Test {
    get { return (object)GetValue(TestProperty); }
    set { SetValue(TestProperty, value); }
}
public DataSourceView() {
    InitializeComponent();
    DataContext = new DataSourceViewModel(Test);// Test is always null
}

Ответы:


1

Вы можете использовать перегрузку метода DependencyProperty.Register с PropertyMetadata, который будет иметь параметр PropertyChangedCallback и наблюдать за процессом привязки данных.

    public static readonly DependencyProperty TestProperty =
      DependencyProperty.Register("Test", typeof(object), typeof(DataSourceView), new PropertyMetadata(TestPropertyChangedCallback
    ));

    private static void TestPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        System.Diagnostics.Debug.WriteLine(e.NewValue);
        System.Diagnostics.Debug.WriteLine(e.OldValue);
    }

По следующей ссылке есть решение аналогичной проблемы:

Передача параметров между окном xaml и пользовательским управлением WPF

08.05.2017
  • Здесь аналогичная ситуация: ссылка Вы должны переместить настройку DataContext в обработчик событий Loaded. 08.05.2017
  • Используя метод обратного вызова, я обнаружил, что свойство устанавливается после того, как экземпляр View выполнен, и с помощью ссылки, которую вы предоставили в комментарии, теперь у меня есть доступ к правильному значению. не могли бы вы обновить свой ответ, чтобы он содержал ссылку в вашем комментарии. Спасибо :) 08.05.2017

  • 2

    «Свойство всегда возвращает значение null и никогда не устанавливается». - Неправильно. Свойство имеет значение null в конструкторе DataSourceView. После создания экземпляра DataSourceView для свойства будет установлено значение «Something».

    08.05.2017
  • Да, вы правы, я заметил, что использовал метод обратного вызова, который был предложен в ответе Мэдиден. спасибо за Ваш ответ :) 08.05.2017
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: wedx@cp9.ru