У меня есть простой вид, который отображает метку с вопросом, который связан с моей ViewModel. теперь, если я устанавливаю свойство в своем конструкторе, я вижу, что Label отображает все, на что я его установил. если я заполнил свою командную функцию, я не вижу изменения метки. Самое забавное, что если я установил свойство Title (простая строка, которая имеет get и set), то это изменится независимо от того, где я его установил. но по какой-то причине это конкретное свойство не хочет показывать изменения в нем. Я попытался упростить это, насколько могу. Я попытался определить свойство публичной строки в моей ViewModel и снова, если я установил его в конструкторе, чем он связывает другие мудрые, если он задан в моей Командной функции, тогда он не изменяется.Xamarin View not Binding from viewModel after Constructor
вот мой XAML
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Pre.MyPage"
Title="{Binding Title}"
Icon="about.png">
<StackLayout VerticalOptions="Center" HorizontalOptions="Center" >
<Label Text="{Binding MyClassObj.Question, Mode=TwoWay}"/>
</StackLayout>
</ContentPage>
Вот мой код за
public partial class MyPage : ContentPage
{
MyViewModel vm;
MyViewModel ViewModel => vm ?? (vm = BindingContext as MyViewModel);
public MyPage()
{
InitializeComponent();
BindingContext = new MyViewModel(Navigation);
}
protected override void OnAppearing()
{
base.OnAppearing();
ViewModel.LoadQuestionCommand.Execute("1");
}
}
Вот мой ViewModel
public class MyViewModel : ViewModelBase
{
public MyClass MyClassObj {get;set;}
ICommand loadQuestionCommand;
public ICommand LoadQuestionCommand =>
loadQuestionCommand ?? (loadQuestionCommand = new Command<string>(async (f) => await LoadQuestion(f)));
public MyViewModel(INavigation navigation) : base(navigation)
{
Title = "My Title";
}
async Task<bool> LoadQuestion(string id)
{
if (IsBusy)
return false;
try
{
IsBusy = true;
MyClassObj = await StoreManager.QuestionStore.GetQuestionById(id);
//MyClassObject is populated when I break here
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
finally
{
IsBusy = false;
}
return true;
}