Если я поставлю здесь точку останова, свойство NewOrderDetails объекта NewOrderViewModel будет нулевым - ПОЧЕМУ ???
В то время, когда достигнута точка останова, данные в NewOrderDetails
не имеютбыть установленным, потому что httpRequest все еще запрашивает, и вам нужно дождаться окончания запроса, чтобы получить данные от Api
.
. Чтобы решить вашу проблему, вы должны реализовать INotifyPropertyChanged
в NewOrderDetails
и NewOrderViewModel
для уведомления об обновлении значения View после получения данных от Api. Я дам вам несколько фрагментов кода:
В NewOrderDetails
:
public class NewOrderDetails : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public NewOrderDetails()
{
}
public string CustomerName
{
set
{
if (customerName != value)
{
customerName = value;
OnPropertyChanged("CustomerName");
}
}
get
{
return customerName;
}
}
string customerName { get; set; }
}
В NewOrderViewModel
:
public class NewOrderViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public NewOrderDetails NewOrderDetaila
{
set
{
if (newOrderDetails != value)
{
newOrderDetails = value;
OnPropertyChanged("NewOrderDetaila");
}
}
get
{
return newOrderDetails;
}
}
NewOrderDetails newOrderDetails { get; set; }
public NewOrderViewModel( int custId)
{
NewOrderDetaila = new NewOrderDetails();
LoadNewOrderDetails(custId);
}
private async void LoadNewOrderDetails(int custId)
{
//...
NewOrderDetaila.CustomerName = "133";
//...
}
}
И в Xaml
привязка:
<Label Text="{Binding NewOrderDetaila.CustomerName}"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
Попробуйте и дайте мне знать, если это работает для вас.