У меня есть ViewModel, которая должна обновлять элементы управления пользовательского интерфейса View в соответствии с данными из БД.Это происходит для корректного обновления элемента управления Entry, но мои средства выбора не получают обновленного Selection, даже если параметр изменяет значение в ViewModel ..
Вот код из Xaml View:
<Entry x:Name="TitleBox" Grid.Row="0" HorizontalOptions="FillAndExpand" Placeholder="Title" Text="{Binding Title, Mode=TwoWay}"/>
<Picker x:Name="TypeCombo" Title="Type" Grid.Row="2" SelectedItem="{Binding Type, Mode=TwoWay}" ItemsSource="{Binding FeaturedType}"/>
И ViewModel:
public string Title
{
get => _Version.Title;
set
{
if (_Version.Title != value)
{
_Version.Title = value;
NotifyPropertyChanged("Title");
}
}
}
public string Type
{
get => _Version.Type;
set
{
if (_Version.Type != value)
{
_Version.Type = value;
NotifyPropertyChanged("Type");
}
}
}
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
В определенный момент в ViewModel _Version назначается объект из БД, а его заголовок и тип назначаются соответственно.
Когда страница завершает загрузку, мой пользовательский интерфейс получает заголовок, обновленный, но тип из средства выбора не выбирается, даже если значение является правильным в ViewModel.Средство выбора остается на -1 (хотя исходные элементы верны):
ObservableCollection<string> _featuredType;
public ObservableCollection<string> FeaturedType
{
get => _featuredType;
set
{
if (_featuredType != value)
{
_featuredType = value;
NotifyPropertyChanged("FeaturedType");
}
}
}
Я теряю голову здесь, поскольку эквивалент ComboBox в UWP работал без проблем, но мне пришлось перейти на Xamarin, поскольку я становлюсь зависимым от Android.
Вот как я привязываюсь к ViewModel:
public PageViewModel ViewModel { get; set; }
BindingContext = this.ViewModel = new PageViewModel();
Также я заметил, что при выполнении некоторого теста в коде, например, так:
string testType = ViewModel.Type;
string testTitle = ViewModel.Title;
возвращает правильный заголовокзначение, но значение типа приводит к нулю, даже если во ViewModel это было правильно.