1
我有一個簡單的視圖,顯示一個標籤與正在從我的ViewModel綁定的問題。現在如果我在構造函數中設置屬性,我會看到標籤顯示我設置的任何內容。如果我從我的命令函數填充,我看不到標籤更改。有趣的是,如果我設置Title屬性(一個簡單的字符串有一個get和set),那麼無論我設置它在哪裏都會改變。但由於某些原因,此特定屬性並不想顯示其更改。我儘可能地簡化了這一點。我試圖在我的ViewModel中定義一個公共字符串屬性,如果我在構造函數中設置它,而不是在綁定其他方面,如果它在我的命令函數中設置,那麼它不會改變。Xamarin查看未綁定從視圖模型構造函數後
這裏是我的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;
}