Обновленное значение не отражается в графическом интерфейсе WPF
Я создал одно приложение Tab, которое содержит одно главное окно и связанную вкладку, каждая вкладка имеет отдельную модель представления.
Каждая вкладка инициализируется одна за другой, как только приложение будет открыто должным образом, то я хочу обновить некоторые значения из второй вкладки, и эти изменения должны быть отражены на первой вкладке.
Поэтому я реализовал событие INotifyPropertChanged, связанное с этими свойствами, но оно не отражено на первой вкладке.
Похоже, есть какая-то проблема в том, что DataContext не обновляется должным образом при изменении значения во второй вкладке.
Что я уже пробовал:
Я попытался обновить первую вкладку DataContext, изменив значения(сеттер свойства) на второй вкладке. Я видел, что при отладке свойство обновилось, но оно не отражается в графическом интерфейсе.
Спасибо.
<pre>//First tab initialization . public partial class PersonUserControl : UserControl { /// <summary> /// Default constructor. /// </summary> public PersonUserControl () { InitializeComponent(); // Allow for UserControl to init successfully within VS Designer. if ( !DesignerProperties.GetIsInDesignMode(this) ) { DataContext = new PersonViewModel(); } } //First tab View- Model: PersonViewModel.cs public string JoinDate { get { return _joinDate; } set { if (_joinDate != value) { _joinDate = value; OnPropertyChanged("JoinDate"); } } } //First Tab XAML component. <pre> <TextBlock FontWeight="Bold" Height="28" HorizontalAlignment="Left" Margin="30,350,0,0" Text="{Binding JoinDate, Mode=OneWay}" VerticalAlignment="Top" /> //Second tab initialization. public partial class UpdateInfoControl : UserControl { /// <summary> /// Default constructor. /// </summary> public UpdateInfoControl() { InitializeComponent(); // Allow for UserControl to init successfully within VS Designer. if ( !DesignerProperties.GetIsInDesignMode(this) ) { DataContext = new UpdateInfoModel(); } } //Second tab View-Model: UpdateInfoModel.cs public DateTime TimeOfDay { get { return _timeOfDay; } set { if ( _timeOfDay != value ) { _timeOfDay = value; OnPropertyChanged("TimeOfDay"); _updateInfoViewModel.JoinDate = timeOfDay .ToString(); } } } //Second Tab XAML component. <DatePicker Height="26" HorizontalAlignment="Right" Margin="0,69,239,0" SelectedDate="{Binding TimeOfDay, Mode=TwoWay}" SelectedDateFormat="Long" VerticalAlignment="Top" Width="208" />
[no name]
Не могли бы вы показать нам свой код?
Vipin_Sharma_
Я обновился.
Kenneth Haugland
А код XAML?
Vipin_Sharma_
Я обновился.
Gerry Schmitz
Почему у вас есть "OneWay" на текстовом блоке? Текстовый блок может быть только "односторонним".
Почему вы конвертируете даты в строки перед их отображением?
Почему бы вам просто не привязать оба элемента управления к одному источнику?
Vipin_Sharma_
Я использую TextBlock для отображения обновленной даты, поток данных идет только одним способом, получить обновленную дату из DatePicker.
Мне нужно использовать Tostring("D").
Оба элемента управления имеют разные представления и модели представлений.