MvxDialogFragmentを表示する簡単な方法は何ですか?

ジムウィルコックス

MvxDialogFragmentを使用して、アクティビティからのデータバインドダイアログを表示しようとしています。私のダイアログViewModelは次のとおりです。

public class ContainerDialogViewModel : MvxViewModel
{

    public string ShipperName;

    public void Init(string Name)
    {
        ShipperName = Name;
        LoadData();
    }

    public void LoadData()
    {
        Survey = SurveyDataSource.CurrSurvey;
    }

    private ShipmentSurvey _Survey;
    public ShipmentSurvey Survey
    {
        get
        {
            return _Survey;
        }
        set
        {
            _Survey = value;
            RaisePropertyChanged(() => Survey);
            RaisePropertyChanged(() => Containers);
        }
    }


    public List<ShipmentSurveyContainer> Containers
    {
        get
        {
            if (Survey == null)
                return new List<ShipmentSurveyContainer>();
            else
                return Survey.SurveyContainers.ToList();
        }
    }

}

MvxDialogFragmentは次のようにコーディングされています。

public class ContainerDialog : MvxDialogFragment<ContainerDialogViewModel>
{
    public override Dialog OnCreateDialog(Bundle savedState)
    {
        base.EnsureBindingContextSet(savedState);

        this.BindingInflate(Resource.Layout.ContainerDialog, null);

        return base.OnCreateDialog(savedState);
    }

}

私の活動では、ダイアログを起動する最も簡単な方法を見つけようとしています。これが私が試したことです:

public class SurveyView : MvxActivity
{
    public void ShowContainerDialog()
    {
        ContainerDialogViewModel vm = new ViewModels.ContainerDialogViewModel();
        vm.Init("Test Name");
        var dialogFragment = new ContainerDialog()
        {
            DataContext = vm
        };
        dialogFragment.Show(FragmentManager, "Containers");
    }
}

ビューモデルを作成する私の方法は正統ではないと確信していますが、それを行う別の方法はわかりません。最大の問題は、FragmentManagerが間違ったバージョンにキャストされていることです。ShowはAndroid.Support.V4.App.FragmentManagerを探しており、公開されているFragmentManagerはAndroid.App.FragmentManagerです。MvxActivityをMvxFragmentActivityに変更しようとしましたが、これは役に立たなかったようです。誰かが私を正しい方向に向けることができますか?

ジムウィルコックス

MvvmCrossは、これを実行しようとしたときに実際にはサポートしていませんでしたが、これが必要な別のインスタンスに遭遇しました。残念ながら、機能はそこにあります。解決策を教えてくれた@ Martijn00に感謝します。これは非常に基本的なことですが、誰かに役立つかもしれないと思います。

私のレイアウト:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
  <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      style="@style/TableHeaderTextView"
      android:text="Work Date"/>
  <MvxDatePicker
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20dp"
    local:MvxBind="Value WorkDate" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Close"
        local:MvxBind="Click CloseCommand" />
</LinearLayout>

私のViewModel:

public class HoursDateDialogViewModel : MvxViewModel<EstimateHours>
{
    private readonly IMvxNavigationService _navigationService;

    public HoursDateDialogViewModel(IMvxNavigationService navigationService)
    {
        _navigationService = navigationService;

        CloseCommand = new MvxAsyncCommand(async () => await _navigationService.Close(this));
    }

    public override System.Threading.Tasks.Task Initialize()
    {
        return base.Initialize();
    }

    public override void Prepare(EstimateHours parm)
    {
        base.Prepare();
        Hours = parm;
    }

    public IMvxAsyncCommand CloseCommand { get; private set; }

    private EstimateHours _Hours;
    public EstimateHours Hours
    {
        get
        {
            return _Hours;
                }
        set
        {
            _Hours = value;
            RaisePropertyChanged(() => Hours);
            RaisePropertyChanged(() => WorkDate);
        }
    }

    public DateTime WorkDate
    {
        get
        {
            return Hours.StartTime ?? DateTime.Today;
        }
        set
        {
            DateTime s = Hours.StartTime ?? DateTime.Today;
            DateTime d = new DateTime(value.Year, value.Month, value.Day, s.Hour, s.Minute, s.Second);
            Hours.StartTime = d;
            DateTime e = Hours.EndTime ?? DateTime.Today;
            d = new DateTime(value.Year, value.Month, value.Day, e.Hour, e.Minute, e.Second);
            Hours.EndTime = d;
            RaisePropertyChanged(() => WorkDate);
        }
    }

}

私の見解:

[MvxDialogFragmentPresentation]
[Register(nameof(HoursDateDialogView))]
public class HoursDateDialogView : MvxDialogFragment<HoursDateDialogViewModel>
{
    public HoursDateDialogView()
    {
    }

    protected HoursDateDialogView(IntPtr javaReference, JniHandleOwnership transfer)
        : base(javaReference, transfer)
    {
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        var ignore = base.OnCreateView(inflater, container, savedInstanceState);

        var view = this.BindingInflate(Resource.Layout.HoursDateDialogView, null);

        return view;
    }
}

これですべてです。パラメータオブジェクトを渡し、オブジェクトの一部をMvxDatePickerにバインドすることができます。このダイアログを表示するには、最初にSetup.csで、次のものが必要です。

    protected override IMvxAndroidViewPresenter CreateViewPresenter()
    {
        return new MvxAppCompatViewPresenter(AndroidViewAssemblies);
    }

ダイアログを開くビューモデルには、以下を含むコンストラクターが必要です。

    private readonly IMvxNavigationService _navigationService;

    public LocalHourlyViewModel(IMvxNavigationService navigationService)
    {
        _navigationService = navigationService;
    }

これにより、ナビゲーションサービスが挿入され、操作できるようになります。そして最後に、ダイアログを開くためにあなたがしなければならないのは:

async () => await _navigationService.Navigate<HoursDateDialogViewModel, EstimateHours>(Item);

あなたが電話を待たなければならないかどうかさえわかりませんが、私は例に従っていました。提供されているリンク@ Martijn00で他の例を見ることができます:

https://github.com/MvvmCross/MvvmCross/tree/develop/TestProjects/Playground

乾杯!

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

texiファイルを表示する簡単な方法は何ですか?

std :: tupleを反復する簡単な方法は何ですか?

Gitで競合するファイルを一覧表示する最も簡単な方法は何ですか?

特定のビューを表示するルートを実装する最も簡単な方法は何ですか?

私の(巨大な)php配列をjqgridに表示する最も簡単な方法は何ですか?

「チェックボックス」から「divを表示」する簡単な方法は何ですか?

HighStocksNavigatorで系列データを非表示にする簡単な方法は何ですか

`.csv`ファイルを解析して表示する最も簡単な方法は何ですか?

JavaFX:簡単なメッセージを表示するための最良の方法は何ですか?

Vimのquickrefページを表示する最も簡単な方法は何ですか?

PythonでByteEnumを作成する最も簡単な方法は何ですか?

nginxでPHPを有効にする最も簡単な方法は何ですか?

xamppでmysql全体を複製する最も簡単な方法は何ですか?

JavaでScala PartialFunctionを実装する最も簡単な方法は何ですか?

Androidで画面サイズを確認する簡単な方法は何ですか?

SASSで変数を分割する最も簡単な方法は何ですか?

年を文字列で取得する最も簡単な方法は何ですか?

今日の午前0時をFlutterで取得する簡単な方法は何ですか?

AngularでeditFormを作成する最も簡単な方法は何ですか?

Pythonで特定の配列値を取得する簡単な方法は何ですか?

他の関数で関数を作成する簡単な方法は何ですか

http:// localhostをhttps:// someOtherDomainとして提供する簡単な方法は何ですか?

Java配列を出力する最も簡単な方法は何ですか?

ファイルをunrarする最も簡単な方法は何ですか?

gitツリーを剪定する最も簡単な方法は何ですか?

ArrayListを逆にする最も簡単な方法は何ですか?

/と/ homeをマージする最も簡単な方法は何ですか?

内部Androidアプリを配布する最も簡単な方法は何ですか

空のshared_ptrを作成する最も簡単な方法は何ですか?

TOP 一覧

  1. 1

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    CSSのみを使用して三角形のアニメーションを作成する方法

  4. 4

    ドロップダウンリストで選択したアイテムのQComboBoxスタイル

  5. 5

    ZScalerと証明書の問題により、Dockerを使用できません

  6. 6

    PyCharmリモートインタープリターはプロジェクトタブにサイトパッケージのコンテンツを表示しません

  7. 7

    Windows 10でのUSB入力デバイスの挿入/取り外しの検出

  8. 8

    Excel - count multiple words per cell in a range of cells

  9. 9

    PictureBoxで画像のブレンドを無効にする

  10. 10

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  11. 11

    スタート画面にシャットダウンタイルを追加するにはどうすればよいですか?

  12. 12

    Python / SciPyのピーク検出アルゴリズム

  13. 13

    Luaの文字列から特定の特殊文字を削除するにはどうすればよいですか?

  14. 14

    Pythonを使用して、リストからデータを読み取り、特定の値をElasticsearchにインデックス付けするにはどうすればよいですか?

  15. 15

    LinuxでPySide2(Qt for Python)をインストールするQt Designerはどこにありますか?

  16. 16

    goormIDEは、ターミナルがロードするデフォルトプロジェクトを変更します

  17. 17

    QGISとPostGIS(マップポイント(米国の地図上にraduisを使用した緯度と経度)

  18. 18

    MLでのデータ前処理の背後にある直感

  19. 19

    ターミナルから「入力ソースの変更」ショートカットを設定する

  20. 20

    パンダは異なる名前の列に追加します

  21. 21

    同じクラスの異なるバージョンを使用したクラスローディング:java.lang.LinkageError:名前の重複クラス定義を試行しました

ホットタグ

アーカイブ