이미 활동에 바인딩 된 ViewModel 속성을 업데이트 할 때마다이 오류가 발생합니다. 나는 ...이 오류는 다른 스레드 (UI하지 스레드)에서 업데이트 UI와 관련이 있지만이 바인딩을 MVVMLight 방법을 제어 할 수 없다는 것을 알아MVVMLight가있는 Xamarin Android : 뷰 계층 구조를 만든 원래 스레드 만 해당 뷰를 만질 수 있습니다.
활동 :
private readonly List<Binding> _bindings = new List<Binding>();
public PersonViewModel ViewModel
{
get
{
return App.Locator.Detail;
}
}
private TextView _txtName;
public TextView TxtName
{
get
{
return _txtName ??
(_txtName = FindViewById<TextView>(Resource.Id.txtName));
}
}
protected async override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Detail);
_bindings.Add(this.SetBinding(
() => ViewModel.Person.Name,
() => TxtName.Text));
await Task.Factory.StartNew(() => { ViewModel.LoadDetailCommand.Execute(null); });
}
뷰 모델 :
private IDataService _dataService;
private PersonObj _person;
public PersonObj Person
{
get
{
return _person;
}
set
{
Set(ref _person, value);
}
}
private RelayCommand _loadDetailCommand;
public RelayCommand LoadDetailCommand
{
get
{
return _loadDetailCommand
?? (_loadDetailCommand = new RelayCommand(
async() =>
{
await LoadDataAsync();
}));
}
}
public PersonViewModel(IDataService dataService)
{
_dataService = dataService;
}
private async Task LoadDataAsync()
{
try
{
Person= await _dataService.GetPerson(0);
}
catch (Exception ex)
{
// Exception here!!
}
}
내가 알아야 할 것은 아니지만 LoadDetailCommand (_dataService.GetPerson)는 httpclient와 네트워크 호출을 실행하고 "NetworkOnMainThreadException"예외를 제공합니다 ... 내가 Task.Run에 캡슐화하면 어떻게 오류를 잡을 수 있습니까? –
'try/catch'를 사용하더라도'async void' 메쏘드 안에있는 어떤 태스크도 예외를 생성하지 않습니다 : https://msdn.microsoft.com/en-us/magazine/jj991977.aspx?f=255&MSPPError=-2147217396 – xleon
이 메서드는 void가 아닙니다 : "private async Task LoadDataAsync()" –