質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

1回答

1334閲覧

XamarinでMmmvCrossがうまく動きません。

kamingout

総合スコア44

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2020/02/23 16:36

MvvmCrossを利用して、ViewModel以下を共通のコードで実装しようとしています。

■現状
mvvmcrossを用いて実装済みのWPFのアプリケーションコードがあります。
このWPFのコードの共通化部分(ViewModel, Model)はMvvmCrossを用いて実装されています。

このWPFコードの共通コードをXamarinで利用したいと考えております。
下記コードを参考にし、ViewModelの参照部分をWPFのViewModelに置き換えようとしました。
https://github.com/Baseflow/MvxForms

Xamarin側のViewModelの基底クラスが"MvvmCross.ViewModels.MvxViewModel"であるのに対して
WPFの共通コードのviewmodelの基底クラスは"Mvvmcross.Core.ViewModel.MvxViewModel"となっており微妙に異なります。
Xamarin側の基底クラスを"Mvvmcross.Core.ViewModel.MvxViewModel"にしたところ、オーバーライドできないメソッドが出てきてしまい
うまく置き換えが出来ません。

このような場合、良い対応方法はありますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

MvxViewModelの名前空間が"Mvvmcross.Core.ViewModelなら、5系のバージョンですね。
一方、参考にされたコードは、6系が使われていて、5系と6系では大きく変更されているので、そのままでは使えません。
WPFのコードをそのままで5系で作るか、修正して6系にするかのどちらかだと思います。
6系にするなら以下を参考にしてみてください。

Upgrade from 5 to MvvmCross 6

投稿2020/02/24 06:11

編集2020/02/24 06:12
f-miyu

総合スコア1625

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kamingout

2020/02/25 15:55

ありがとうございます。 系を合わせれば動作できそうというところまで理解できました。 実際に下記を参考に5系に合わせてXamarin上で組み込もうとしたときに MvxAndroidApplicationを参照することができませんでした。 関係がありそうなnamespaceをいろいろと調べたのですが、見つかりませんでした。 どこから参照すればよいかわかりますでしょうか? https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview お手数おかけしますが、よろしくお願いいたします。
kamingout

2020/02/26 14:44

度々ご回答ありがとうございます。 恥ずかしながら、githubの扱い方にまだ慣れておりません。 今回のMvxAndroidApplicationがどこを参照すればよいかということを探す場合、 上記URLのbranchesを5.7.0にして、そのあとどのように調べるのが適切でしょうか? また、ジェネリクスとはどういう意味でしょうか? お手数おかけしますが、よろしくお願いいたします。
f-miyu

2020/02/26 16:56

> そのあとどのように調べるのが適切でしょうか? ドキュメントを検索してみましたが、MvxAndroidApplicationについての直接的な記述はなさそうです。 ソース自体は、ここです。 https://github.com/MvvmCross/MvvmCross/blob/5.7.0/MvvmCross/Droid/Droid/Views/MvxAndroidApplication.cs 何を知りたいかにもよりますが、今回のMvxAndroidApplicationであれば、名前空間が変わったという情報は、回答にあげたURLで書いてあります。とりあえず、一通り目を通して、以下のサンプルコードもみてみてはいかがでしょうか? https://github.com/MvvmCross/MvvmCross/tree/5.7.0/TestProjects/Playground > ジェネリクスとはどういう意味でしょうか? MvxAndroidApplication<MvxAndroidSetup<App>, App>の様に<>で型をパラメータとして与えることができるクラスのことです。ジェネリクスではないということは、<>で型をパラメータで与えることはできないということです。
kamingout

2020/02/27 15:45

詳細なご説明ありがとうございます。 早速ご説明いただいた内容を参考にし、下記mvvmcrossのサンプルプログラムを動かそうとしています。 https://www.mvvmcross.com/documentation/tutorials/tipcalc/the-core-project?scroll=1930 しかし、MvxViewModelの派生クラスTipViewModelを作成したところ、 "overriderするInitialize()メソッドが見つかりませんでした。"というエラーが出てしまいます。 下記のコードにもInitializeメソッドは記述されているのになぜでしょうか? https://github.com/MvvmCross/MvvmCross/blob/5.7.0/MvvmCross/Core/Core/ViewModels/MvxViewModel.cs これ以上調べる策がなく行き詰っております。 お手数おかけしますが、よろしくお願いいたします。
f-miyu

2020/02/27 16:56

Initializeがないとなるともしかして4系ですか? 実際にWPFで使っているバージョンはいくつなのかわかりますか?
kamingout

2020/02/29 10:19

4系ですね。 4.4.0になります。 この場合、どのような対応が必要になるのでしょうか?
kamingout

2020/03/01 07:30

追記ですが、4系では"MvxAndroidApplication"クラスも参照できませんでした。 お手数おかけしますが、よろしくお願いします。
f-miyu

2020/03/01 07:36

4から5で何が変わったかのかはここを見ればわかります。 https://www.mvvmcross.com/documentation/upgrading/upgrade-to-mvvmcross-50?scroll=1983 あとは、試しながらやってくしかないかと思います。MvvmCrossは、特に情報も少ないですし、自分も実際のソースコードをみたりして、試行錯誤しながら理解していきました。もし詰まったことがあったら、また質問してください。その時には、ソースコードものせていただけるとより具体的な回答ができますので、お願いします。
f-miyu

2020/03/01 07:45

4.4では、MvxAndroidApplicationはまだありません。
kamingout

2020/03/01 08:06

ご返信ありがとうございます。 ■現在の私の実装状況を共有します。 ・nugetでversion4.4.0のmvvmcrossをインストール ・下記のチュートリアルに沿ってDroidプロジェクト、Coreプロジェクトを作成 https://www.mvvmcross.com/documentation/tutorials/tipcalc/a-xamarinandroid-ui-project https://www.mvvmcross.com/documentation/tutorials/tipcalc/the-core-project?scroll=1800 ・Droid Projectでは、MainApplicationクラスの親クラスとなるMvxAndroidApplicationが存在しないため、エラーが出てしまっています。 ・Core Projectでは、"TipViewModel"クラスにInitializeが存在しないため、エラーが出てしまっています。 チュートリアルを参考に進めているため、アプリ起動時に必要なMvxAndroidApplicationが存在しないとなるとどうすればよいかわからない状態となってしまっています。 過去のチュートリアルを探しても見つからなかったのですが、ご存じないでしょうか?
f-miyu

2020/03/02 18:09

4系のチュートリアルのサンプルはここが参考になるかと思います。 https://github.com/MvvmCross/MvvmCross-Samples/tree/3824a4c4567865e567b44db5dcc72912a7161cc7/TipCalc 少し説明すると、MvxAndroidApplicationではなく、MvxAndroidSetupを継承したSetupクラスを作ることになります。 あと、5系以下だと、NuGetでMvvmCross.StarterPackを追加すれば、いい感じにテンプレートを作ってくれるので、こちらも参考になるかと思います。 https://www.nuget.org/packages/MvvmCross.StarterPack
kamingout

2020/03/07 06:47

返信が遅くなりすみません。情報提供ありがとうございます! 上のサンプルを試したところ、4系は問題なく動きました!あとは自身のViewModelを組み込んでうまく動くかを調べながら試してみます。 何度も助けていただき本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問