ViewModel
이 있는데, Commanding
을 사용합니다. 이 ViewModel
에서 MediaPlugin 에 액세스하고 싶습니다. 이 플러그인을 사용하여 Initialize()
으로 전화해야합니다. async
호출을 사용하기 때문에 타이밍 문제가 있습니다. ViewModel에서 비동기 메서드 호출
이
내 코드 :이 코드public ICommand CameraCommand
{
get { return _cameraCommand ?? (_cameraCommand = new Command(async() => await ExecuteCameraCommand(),() => CanExecuteCameraCommand())); }
}
public bool CanExecuteCameraCommand()
{
// Check if initialized before calling properties
if (!this.initialized)
InitMedia();
if (!this.initialized || !CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
{
return false;
}
return true;
}
public async Task ExecuteCameraCommand()
{
// Assure that it is initialized before calling method
var file = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions {});
// ...
}
private void InitMedia()
{
CrossMedia.Current.Initialize();
this.initialized = true;
}
응용 프로그램이 충돌
과 당신은 어떤 속성을 호출하기 전에 초기화()를 호출해야합니다. Plugin.Media.MediaImplementation.get_IsCameraAvailable에서
()
나는 초기화가 완료되기 전에 호출이 코드
public MyViewModel()
{
InitData();
}
private async Task InitData()
{
// ...
await InitMedia();
}
private async Task InitMedia()
{
await CrossMedia.Current.Initialize();
this.initialized = true;
}
public bool CanExecuteCameraCommand()
{
// Check if initialized before calling properties
if (!this.initialized)
return false;
// ...
}
CanExecuteCameraCommand()
와 같은 생성자의 초기화를 시작합니다. 결과적으로 false
이 반환되고 UI의 단추가 비활성화됩니다.
Windows 10 Mobile 장치 (Windows 10 Universal)의 Xamarin.Forms 환경에서이 코드를 테스트하고 있습니다.
MyViewModel의 사용을 공유 할 수 있습니까? –
내 XAML 용으로 ['BindingContext'] (https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_binding_basics/)로 사용됩니다. – testing
예, 초기화하기 전에 BindingContext를 호출 하시겠습니까? xmal 생성자에서 그런 식으로 뭔가? public LoginPage() { vm = new LoginPageViewModel(); BindingContext = vm; InitializeComponent(); } –