У меня такое ощущение, что мое представление не обновляется, потому что событие NotifyPropertyChanged запускается до создания пользовательского интерфейса, но я не знаю, как это преодолеть.View Model не обновляет пользовательский интерфейс, когда внутри конструктора
Я действительно не отправляю код для анализа, потому что знаю, что работа с данными работает. Они просто терпят неудачу во время построения страницы.
Я строго публикую его, чтобы вы могли понять, о чем я говорю.
public Obj1 SelectedObj1
{
get { return _SelectedObj1; }
set { _SelectedObj1 = value; NotifyPropertyChanged("SelectedObj1"); }
}
public Obj2 SelectedObj2
{
get { return _SelectedObj2; }
set { _SelectedObj2= value; NotifyPropertyChanged("SelectedObj2"); }
}
public Obj3 SelectedObj3
{
get { return _SelectedObj3; }
set { _SelectedObj3 = value; NotifyPropertyChanged("SelectedObj3"); }
}
Внутри моего конструктора
public constructor(){
BuildFakeData();
SelectedObj1 = observableCollection[0];
SelectedObj2 = SelectedObj1.obj2s.Count > 0 ? SelectedObj1.obj2s[0] : null;
SelectedObj3 = SelectedObj2.obj3s.Count > 0 ? SelectedObj2.obj3s[0] : null;
}
Мой вопрос, когда вы делаете MVVM, если установить связанные свойства в конструкторе, скажем, для DataGrid выбран Row, он будет заполнять или это провал потому что XAML еще не построен?
Вот где DataContext создается в представлении
<Window.Resources>
<vm:ViewModel x:Key="viewModel"/>
</Window.Resources>
<Grid
DataContext="{StaticResource viewModel}">
Вот где я устанавливаю выбранный элемент для сетки
<igWPF:XamDataGrid
ActiveDataItem="{Binding SelectedObj1}"
DataSource="{Binding observableCollection}"
** Не относится: ** LINQ - ваш друг. Удалите этот ненужный условный оператор и используйте 'SelectObj11.obj2s.FirstOrDefault()'. –
@HighCore Я на самом деле делаю это в производственном коде. Я просто сделал это таким образом, чтобы ограничить любую путаницу. Однако, спасибо. –
@AnthonyRussell Я установил свойства в конструкторе, и мое представление обновлено правильно. У вас есть какие-либо ошибки привязки в выходе? Кроме того, когда вы устанавливаете 'DataContext' для View –