Если я устанавливаю BindingContext в xaml и удаляю его из конструктора, он не работает.
Как установить его в XAML
?Вы должны предоставить int
параметр конструктору.Поэтому, скорее всего, имеет смысл установить BindingContext
страницы в C #:
class MyPage
{
ViewModel vm;
public MyPage(int id)
{
InitializeComponent();
vm = new ViewModel(id);
BindingContext = vm;
}
}
Обратите внимание, что вы вводите здесь тесную связь, так как ваш Page
знает о ViewModel
конкретный тип.
Если я установлю привязку на метку адреса в xaml и удалю ее из кода позади, она не будет работать.
Вот как Label
с переплетом должен выглядеть так: XAML
:
<Label Text="{Binding Address}" />
Если я попытаюсь использовать Имя в качестве заголовка страницы, это не сработает.
Вот как создать привязку к заголовку страницы:
ContentPage.SetBinding(Page.TitleProperty, nameof(Class1.Name));
Обратите внимание, что она должна вызываться после установки BindingContext
страницы.
Inни в одном из этих случаев я не получаю никакой ошибки, например «Binding: свойство не найдено в BindingContext», поэтому я понимаю, что они обнаруживаются, но, возможно, они пусты.
Попробуйте установить точку останова послеvm.LoadDataAsync()
и проверьте содержимое ViewModel
.
Если я изменю свойство из Class1, ононе появляется на странице.Могу ли я предположить, что причина в том, что Class не реализует INotifyPropertyChanged?
Чем больше я слежу за вашими вопросами, тем больше похоже на проблему реализации INotifyPtopertyChanged
Можете ли вы поделиться соответствующим кодом?
Лучше или целесообразнее загружать данные в конструктор виртуальной машины (Task.Run) или в Page.OnAppearing (await vm.LoadData ())?
Конструктор должен иметь виднастолько просто, насколько это возможно, никогда не создавайте пользовательские конструкторы для выполнения кода, который может не работать, как правило.Поэтому лучше представить интерфейс, который будет реализован вашим ViewModel
и который должен иметь методы OnAppearing()
& OnDisappearing()
, тогда ваша страница не будет знать о конкретном типе ViewModel
.Я думаю, остальное должно быть ясно.