私のViewModelからバインドされている質問付きのラベルを表示するシンプルなビューがあります。今私は私のコンストラクタでプロパティを設定する場合は、私はそれを設定したラベルを表示するラベルを参照してください。私のコマンド機能から移入された場合、私はラベルが変更されて表示されません。面白いのは、Titleプロパティ(getとsetを持つ単純な文字列)を設定した場合、それが設定されている場所に関係なく変更されるということです。何らかの理由でこの特定のプロパティは変更を表示したくありません。私は可能な限りこれを単純化しようとしました。私はViewModelでパブリックな文字列プロパティを定義しようとしましたが、コンストラクタでそれを設定すると、それがコマンド関数に設定されている場合には他のバインドとバインドするよりも変更されません。ここXamarinビューはコンストラクタの後にviewModelからバインドされません
はここ
<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");
}
}
の背後に私のコードで私のXAMLであるあなたがINofityPropertyChangedイベントを発射されている場合、私の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;
}