Как связать wpf с определенным datacontext из разных классов?

Вопрос: Привет, ребята, я очень новичок в WPF. У меня есть два datacontexts в двух разных классах, которые привязываются к элементам в представлении Datatriggers, и тот или другой не работают, поскольку они не могут связывать оба файла данных вместе. Как связать xaml из двух разных классов с помощью datacontext? Есть ли альтернативный способ сделать это

Вопрос:

Привет, ребята, я очень новичок в WPF. У меня есть два datacontexts в двух разных классах, которые привязываются к элементам в представлении Datatriggers, и тот или другой не работают, поскольку они не могут связывать оба файла данных вместе. Как связать xaml из двух разных классов с помощью datacontext? Есть ли альтернативный способ сделать это проще?

Класс А

public Window1() { InitializeComponent(); Appointments = new Appointments(); DataContext = Appointments; }

Класс B

private void FilterAppointments() { this.DataContext = this; … Лучший ответ:

Во-первых, вы никогда не должны использовать DataContext = this; в любом UserControl в серьезном приложении WPF. Во-вторых, вы должны найти шаблон дизайна MVVM, который дает представление о модели представления для каждого вида. Ваше Window или UserControl – это “Представления”, а ваши модели представлений – это просто классы, которые содержат все свойства данных, которые необходимо отобразить в вашем представлении.

Таким образом, вы должны объявить класс модели представления (который реализует интерфейс INotifyPropertyChanged) и поместить в него все, что вам нужно. Наконец, вы должны установить этот объект в качестве значения свойства DataContext. Таким образом, у вас будет доступ ко всем необходимым вам данным.

Еще раз взглянув на ваш вопрос, мне просто пришло в голову, что вы можете установить DataContext для this чтобы вы могли использовать свойства, которые вы указали в своем Window или UserControl. Если это так, то вы не должны устанавливать для this DataContext, вместо этого используйте RelativeSource Binding для доступа к свойствам. Это освободит фактический DataContext который будет установлен, как вам нравится. Попробуйте эту Binding в Window или UserControl:

<TextBlock Text=»{Binding PropertyName, RelativeSource={RelativeSource AncestorType={x:Type YourPrefix:YourWindowOrControl}}}» />

Оцените статью
Добавить комментарий