2016-11-03 12 views
0

Я использую MVVMCross и имею проблему с привязками MvxDialogFragment. У меня есть базовая услуга, которая разрешена в проекте Core PCL, добавляет реализации пользовательских сервисов в проектах iOS и Android, полученных из базового класса сервиса.Android access MvxDialogFragment view from service

В андроида службе я построить и показать MvxDialogFragment экземпляр:

var top = (MvxFragmentActivity)Mvx.Resolve<IMvxAndroidCurrentTopActivity>().Activity; 

if (top == null) 
{ 
    throw new MvxException("Cannot get current top activity"); 
} 

var dlg = new AlertDialog.Builder(top); 
dlg.Create().Show(); 

dialog = new MyDialog 
{ 
    Cancelable = false 
}; 
dialog.Show(top.SupportFragmentManager, ""); 

И у меня есть простое диалоговое расположение:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <Button 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/test_click_button" 
     android:text="Test" 
     app:MvxBind="Click TestClickCommand" /> 
</LinearLayout> 

Так что моя цель заключается в Acces команд базового обслуживания от dialogFragment, который конкретизируется от обслуживания. Как я могу это сделать?

В качестве альтернативы, я хочу обработать свою кнопку нажатием на сервис, но не могу найти способ сделать это, потому что мои свойства View, ViewModel или Dialog являются нулевыми.

Как можно обрабатывать клики в сервисе или осуществлять самообучение?

+0

Если вы хотите получить доступ к представлению от службы, вы в основном делаете это неправильно. Шаблон Mvvm не предназначен для этого. Вы также говорите: «Я не хочу размещать свои служебные команды в любом режиме просмотра». Команды не живут в сервисах, а в ViewModels. Способы вызова службы ViewModels. Возможно, я просто неправильно понял все это ... – xleon

+0

Спасибо за ответ! Я отредактировал вопрос, главная цель: как связать кнопки dialogfragment с сервисными командами – Fragment

ответ

0

Наконец я достиг желаемого, посредством подписки MvxDialogFragment и инъекция обслуживания:

public class MyDialog : MvxDialogFragment 
{ 
    private ISampleService _sampleService; 

    public MyDialog(ISampleService sampleService) 
    { 
     _sampleService = sampleService; 
    } 

    public override Dialog OnCreateDialog(Bundle savedInstanceState) 
    { 
     EnsureBindingContextSet(savedInstanceState); 

     var dialog = new AlertDialog.Builder(Activity); 
     var view = this.BindingInflate(Resource.Layout.MyDialog, null); 

     view.FindViewById(Resource.Id.test_click_button).Click += (sender, e) => 
     { 
      _sampleService.TestClick(); 
      Dismiss(); 
     }; 

     dialog.SetView(view); 

     return dialog.Create(); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^