Microsoft .NET MAUI part9 [Xamarin]

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2022/09/13(火) 20:08:18.38ID:vLvjlCfL
Xamarinと.NET MAUIのスレッドです。
C#でクロスプラットフォームのアプリを開発できるフレームワーク
無料、クロスプラットフォーム、オープンソース。
対応プラットフォームは、Windows, Android, iOS, macOS, Linuxなど
2.NET MAUI HS
垢版 |
2022/09/13(火) 20:10:31.72ID:vLvjlCfL
Xamarin
https://dotnet.microsoft.com/apps/xamarin

.NET MAUI [.NET Multi-platform App UI]
2022年8月10日公式リリース。Xamarinの後継フレームワーク
https://docs.microsoft.com/en-us/dotnet/maui/
https://github.com/dotnet/maui

前スレ
Xamarin Part8
https://mevius.5ch.net/test/read.cgi/tech/1627778316/
3.NET MAUI HS
垢版 |
2022/09/13(火) 20:11:13.92ID:vLvjlCfL
.NET MAUI | .NET Blog
https://devblogs.microsoft.com/dotnet/category/net-maui/
2022/09/13(火) 20:12:02.42ID:jqG15U0x
このスレにもスクリプト荒らし来たかど思ったら人力だった
5.NET MAUI HS
垢版 |
2022/09/13(火) 20:12:51.66ID:vLvjlCfL
これから.NET MAUIをどんどん盛り上げていきましょう!
〇〇のライブラリが使えた!
□□用のライブラリを作った!
ドシドシ情報共有お願いします!
6.NET MAUI HS
垢版 |
2022/09/13(火) 20:19:29.24ID:vLvjlCfL
正直MicrosoftのドキュメントってXamarinの方が充実してるよな
クラス名で調べたらめちゃくちゃ細かく出てくる
7.NET MAUI HS
垢版 |
2022/09/13(火) 20:19:53.32ID:vLvjlCfL
まぁそのXamarinのクラスがほとんどそのまま使えるんだがw
8.NET MAUI HS
垢版 |
2022/09/13(火) 20:26:58.45ID:vLvjlCfL
PC版はC++でオンライン版はReactなんだろうね
だからReactNative使ってる
9.NET MAUI HS
垢版 |
2022/09/13(火) 20:27:11.47ID:vLvjlCfL
すまん語版した
10.NET MAUI HS
垢版 |
2022/09/13(火) 20:37:02.82ID:vLvjlCfL
COCOA普及率3割ってかなり多いほうだと思うんだがどうなんだ?
パズドラとほぼ一緒と考えると
11.NET MAUI HS
垢版 |
2022/09/13(火) 20:37:39.30ID:vLvjlCfL
ラインは81%らしい
こいつやばいな
12デフォルトの名無しさん
垢版 |
2022/09/13(火) 20:55:24.22ID:Z1HR9JcC
chocoaと言えば富士通だよね。
13デフォルトの名無しさん
垢版 |
2022/09/13(火) 21:02:19.64ID:Z1HR9JcC
LINEは統一教会企業じゃないだろか。
コンピューター関係ではワコムが統一教会企業だぞ。
社長がそう言ってるから。
14.NET MAUI HS
垢版 |
2022/09/13(火) 21:15:09.50ID:vLvjlCfL
>>13
そうなんだ…
2022/09/13(火) 21:31:32.73ID:+cXEuyxc
MAUIはいいけど作りたい物がないのが問題
16.NET MAUI HS
垢版 |
2022/09/13(火) 21:35:19.47ID:vLvjlCfL
たしかにそれはあるな
ML.NETとか使ってAIを使うってのも面白そう
17.NET MAUI HS
垢版 |
2022/09/14(水) 19:02:13.08ID:SbIgB75u
NFC普通にあったわ
https://github.com/franckbour/Plugin.NFC
18.NET MAUI HS
垢版 |
2022/09/14(水) 23:45:17.28ID:3CVM6Rp3
ないもの足りないものがあるなら作るしないからと言って作ることを諦めない
これがZ世代になるとないなら作りませんになっちゃうんだよな
こんなんじゃ一生イノベーションとか起こせないと思うけど
19.NET MAUI HS
垢版 |
2022/09/14(水) 23:46:32.58ID:3CVM6Rp3
ということで何か作りたいんだがどんなのがいいだろうか?
SfMライブラリとか作ってみてぇな
2022/09/15(木) 08:25:03.04ID:A35dXzGC
まず、キーボードで文字を打てるように指導するところから始まるからな。冗談抜きで。卒論で相当苦労するらしい。
2022/09/15(木) 08:37:57.65ID:ZGfA7vld
これからXamarin.formsのアプリをMAUIに移植しなきゃならないのだけど
plugin bleとか使えるのかな
使えないと地獄だけど
22.NET MAUI HS
垢版 |
2022/09/15(木) 12:43:05.08ID:qn04I4Ph
>>20
俺e-typing平均Aだから余裕かな
2022/09/16(金) 16:13:54.31ID:1woCku44
>>20
もうちょっとすればキーボード叩かなくてもスマホつないでスワイプ入力すればいい時代が来そう
24.NET MAUI HS
垢版 |
2022/09/17(土) 19:47:15.06ID:yUvyoPXr
なんかためになりそうなサイト見つけた
https://vladislavantonyuk.azurewebsites.net/articles/Creating-a-bottom-sheet-using-.NET-MAUI
2022/09/17(土) 19:56:43.23ID:ONBj3Hkh
動画つくらんの?三日坊主?
26.NET MAUI HS
垢版 |
2022/09/17(土) 20:28:40.79ID:yUvyoPXr
>>25
つくったけど?
今日の昼アップロードした
他でやれって言われたから専スレ作ったんだけど

.NET MAUI HighSchool
https://mevius.5ch.net/test/read.cgi/tech/1662947042/
27デフォルトの名無しさん
垢版 |
2022/09/19(月) 08:23:29.23ID:Guc0YHbo
ナビゲーションメニュー初めて作って見たんだけどナビゲーション先でObservableCollectionにAddしたものがメインのCollectionViewに表示されるようにするにはどうすればいいんだろうか?
ナビゲーションバックでコレクションを更新すればよいのかな?
2022/09/19(月) 08:42:40.58ID:CegtP/3a
>>27
逆に何で同じコレクションを使わないんだ
29デフォルトの名無しさん
垢版 |
2022/09/19(月) 09:59:22.76ID:Guc0YHbo
>>28
同じコレクション使ってるはずなんだけどページにそれを持ってこうとするとできないんよなぁ…
どうすればいいんだろうか?
違うページでObservableCollectionが入ってるクラスをnewしたら初期化されるかなぁ?
2022/09/19(月) 10:23:17.35ID:lsi5cYj1
何を言ってるのかよくわからん
1つのObservableCollectionを2つのビューにバインドすればいいだけだろう
何をどうしたらそんなことになるんだ
それが再現できる最小のコードを作ってみたら動画のネタにもなるんじゃね
まさか2つのViewModelそれぞれに違うインスタンスのコレクションを追加して自動的に同期しないと悩んでるんじゃないだろうな
2022/09/19(月) 10:44:45.76ID:shikJWy/
それなんじゃね
DIで別のインスタンスみてんじゃ
2022/09/19(月) 11:35:41.96ID:lsi5cYj1
DIならAddTransientだと別々のインスタンスになるからAddSingletonしとけ

public class Model
{
public Collection{get;}=new ObservableCollection<string>();
}
public class ViewModel
{
public ViewModel(Model model)
{
Model=model;
}
public Model Model{get;}
}
public MainPage(ViewModel viewModel)
{
ViewModel=viewModel;
}
public Model ViewModel{get;}
}

こんな風に作ったら

builder.Services.AddSingleton<Model>().AddSingleton<ViewModel>().AddSingleton<MainPage>();

こうすればそれぞれのコンストラクタにインスタンスが自動的に注入される
コンストラクタの引数をインターフェースにしとけばテストの時にモックが注入できる
33デフォルトの名無しさん
垢版 |
2022/09/19(月) 12:15:12.04ID:Guc0YHbo
こんな感じでObservableCollectionをDataCollectionとして作って
(DataSet.cs)
https://imgur.com/EyItdN6.jpg

Navigation先でAddしたやつを
(DetailPage.xaml.cs)
https://imgur.com/y6mRlTQ.jpg

MainPageのCollectionView(memoList)に反映させたい
(MainPage.xaml.cs)
https://imgur.com/yukXPyC.jpg
34デフォルトの名無しさん
垢版 |
2022/09/19(月) 12:20:06.36ID:Guc0YHbo
そういえばナビゲーション先のページAddTransientにしてたわ
AddSingletonにします。
35デフォルトの名無しさん
垢版 |
2022/09/19(月) 12:43:46.65ID:Guc0YHbo
newじゃなくて{get}だけでいいのかな?
2022/09/19(月) 12:53:29.94ID:lsi5cYj1
AddTransientどうこうより先に2回newしてんじゃねーかw
2022/09/19(月) 12:57:27.09ID:lsi5cYj1
>>34
ページはどうせアプリ終了まで生きてるからどうだっていいぞ
38デフォルトの名無しさん
垢版 |
2022/09/19(月) 14:21:39.73ID:Guc0YHbo
>>36
やっぱりnewが悪いのか…
newせずDataCollectionを使う方法ってありますか?
2022/09/19(月) 14:26:26.45ID:lsi5cYj1
AddSingletonしろって言ったばかりだがもしかしてインスタンスの概念がわからない系?
40デフォルトの名無しさん
垢版 |
2022/09/19(月) 14:53:54.45ID:Guc0YHbo
>>39

最初のnewはMainPageでいいんだよね?
そのナビゲーション先でDataListクラスの関数使おうとするとどう指定すればいいんだ?
2022/09/19(月) 15:10:23.98ID:oefI52tK
>>40
いやだからnewしないの
さっき書いたコードのModelのとこを共有したいコレクションを持ったクラスに書き換える
するとサービスプロバイダーにそのクラスを要求したら最初の1回は自動的にnewされたインスタンスが返り、次からは同じインスタンスが返る
つまり何回要求しても同じものが返ってくるんだよ
ここではDIを使ってるからMainPageがMauiAppに作成された時点でViewModelが自動的にサービスプロバイダから注入され、ViewModelが作成された時点でModelが注入される
同じく別のページとそのVMもAddSingletonしとけばそのページに遷移した時にVMにモデルの同じインスタンスが注入される
同じインスタンスだから状態も共有する
newしたら別のインスタンスになっちゃうだろ?
42デフォルトの名無しさん
垢版 |
2022/09/19(月) 15:37:24.08ID:Guc0YHbo
>>41
うーんわからん…
Program.csに>>32を書けってこと?
2022/09/19(月) 15:42:31.60ID:oefI52tK
>>42
MAUI使ってるんじゃねーの?
https://www.syncfusion.com/blogs/post/learn-how-to-use-dependency-injection-in-net-maui.aspx
44デフォルトの名無しさん
垢版 |
2022/09/19(月) 15:54:41.38ID:Guc0YHbo
>>43
なるほど!
これで共有のObservableCollectionを共有できるのか!
これって.NET MAUIからの新機能?
2022/09/19(月) 15:56:32.37ID:oefI52tK
機能としては相当前からあるがここまでの圧をもって押し付けてくるのはMAUIからかな
46デフォルトの名無しさん
垢版 |
2022/09/19(月) 15:59:03.17ID:Guc0YHbo
>>45
ありがとう!
2022/09/19(月) 19:25:59.58ID:UixL+xz1
>>39
みたいだね。 
インスタンスがいまいちわかっていないみたい。
2022/09/20(火) 18:48:08.27ID:tcmFdYIT
MAUI、CollectionViewがバグりすぎててガチで使えないwwwwwwww
ItemTemplate を設定してあるとき、バインド元のコレクションの要素の置き換えをやると画面上では要素が置き換わったように見えるが、置き換え前のビューもなぜかメモリ上に残ったままになるwwwwwwwう◯こwwwwwww
49デフォルトの名無しさん
垢版 |
2022/09/20(火) 18:52:37.03ID:uMWd7f8R
>>48
メモリ管理ができてないってこと?
50デフォルトの名無しさん
垢版 |
2022/09/20(火) 19:41:41.12ID:+1ymuJNf
>>48
こいつが使い方間違えてるのに50ペリカ
2022/09/20(火) 19:43:54.08ID:Pye1gVbz
まさか上の続きなのか?
52デフォルトの名無しさん
垢版 |
2022/09/20(火) 19:51:35.86ID:uMWd7f8R
俺は.NET MAUIのこと悪く言わんよ
EditorコントロールがAndroidでは外側のグリッド(フレーム、スタックレイアウト含む)のWidthを参照しないって仕様は見つけたけど
ホリゾンタルオプションズをフィルにしても一文字分のWidthにしかならんやつ
もちろんちゃんとWidthリクエストすれば問題ない
2022/09/20(火) 20:34:41.76ID:+UHOIJTp
まあ現象再現する最小コードでも上げてもらわないと何とも言えんわな
2022/09/20(火) 20:47:07.60ID:4OsfujaD
>>48
それはパフォーマンスを優先するために画面の再描画をしてないだけ
RxのThrottle使え
2022/09/20(火) 23:22:31.32ID:nDZPLz9M
debounceとかthrottleとかそういうのを知らずにゴリゴリ押して苦しんでる人結構多いよね。
webはおもちゃ、ゲームも所詮おもちゃ、とか言って叩いて無視しすぎたんじゃないかなって思うわ。
2022/09/20(火) 23:29:09.65ID:tcmFdYIT
プロジェクト作って、
MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="<http://schemas.microsoft.com/dotnet/2021/maui>;" xmlns:x="<http://schemas.microsoft.com/winfx/2009/xaml>;" xmlns:local="clr-namespace:CollectionViewMemoryLeak" x:Class="[プロジェクト名].MainPage" x:DataType="local:MainPage"> <Grid RowDefinitions="Auto,*"> <Button Text="Replace" Clicked="Button_Clicked"/> <CollectionView Grid.Row="1" ItemsSource="{Binding Items}"> <CollectionView.ItemTemplate> <DataTemplate> <Label Text="{Binding}"/> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> </Grid> </ContentPage>

MainPage.xaml.cs
using System.Collections.ObjectModel; namespace [プロジェクト名]; public partial class MainPage : ContentPage { public ObservableCollection<string> Items { get; } = new() { "a" }; public MainPage() { InitializeComponent(); BindingContext = this; } private void Button_Clicked(object sender, EventArgs e) { Items[0] += "b"; } }

って置き換えて、デバッグ開始
ボタン1万回ぐらい押すとわかると思うよ
2022/09/20(火) 23:35:20.72ID:tcmFdYIT
ボタン1万回押したくない人用
for (int i = 0; i < 10000; ++i) { await Task.Delay(1); Items[0] += "b"; }
2022/09/20(火) 23:36:04.90ID:tcmFdYIT
※ライブツリービューがめっちゃ重くなるので注意
59デフォルトの名無しさん
垢版 |
2022/09/21(水) 08:20:20.15ID:e5hMcSyJ
.NET 7でマップコントロールが来る!
あとデスクトップようにツールチップやコンテキストメニューが追加されるそうな
60デフォルトの名無しさん
垢版 |
2022/09/21(水) 08:20:43.29ID:e5hMcSyJ
https://devblogs.microsoft.com/dotnet/dotnet-maui-in-dotnet-7-rc1/
2022/09/21(水) 08:30:02.80ID:kbEKaFBQ
Xamarin.formsからの移植って
今までのフォームやソースはだいたい使えるの?
dependencyとかそのまま使える?

フォルダ構成が変わりすぎててAndroid独自のソースどこにおけばいいかわからない
62デフォルトの名無しさん
垢版 |
2022/09/21(水) 08:39:42.22ID:e5hMcSyJ
>>61
ディペンデンシーはHandlerになった
63デフォルトの名無しさん
垢版 |
2022/09/21(水) 08:40:16.29ID:e5hMcSyJ
AndroidのソースはPlatformフォルダにいれればよい
2022/09/21(水) 08:58:23.97ID:KMcq8I6w
>>61
Android独自のソースはPlatforms/Androidの下に置く
そうするとAndroid版のコンパイル対象になる
それか#if ANDROIDの中に入れる
Xamarinは複数プロジェクトだったけどMAUIは部分メソッドを使いたいために単一プロジェクトになってる
つまり共通ソースに部分メソッドの宣言を書いてPlatforms以下それぞれのプラットフォームにそれぞれの実装を書く
UIをカスタマイズしたいならレンダラーじゃなくハンドラーを書くかマッピングを変更する
マッピングの方が軽い変更に向く
マッピングとはUIの共通コードのメソッドやプロパティーをファサードとしてそれらへの操作と実際のそれぞれのプラットフォームでの実装を関連付けるものでプロパティーやメソッド毎に設定できる
一応Xamarinのソースはコンバートできることになってるけど信用してはいけない
2022/09/23(金) 08:43:29.04ID:8SR5QsWP
MAUIではFreezableクラスが無くてBindingProxyを使えないのな。 書くしか無いか・・・
いちいち、DataGridセルなどのチャイルドレベルからDataContextを何段階アンセスターサーチなんてやってられない。 
マンドクセーし、保守性悪い。
66デフォルトの名無しさん
垢版 |
2022/09/23(金) 09:03:46.50ID:gGLSN0ir
UIChallengeやってる人がFigmaAPI使ってC#のグラフィックコード生成するアプリを作ったみたいだね
https://twitter.com/jsuarezruiz/status/1572895480723701766?t=vNe15B3htG50jNi3BvnLZQ&s=19
https://twitter.com/5chan_nel (5ch newer account)
67デフォルトの名無しさん
垢版 |
2022/09/23(金) 23:24:43.35ID:gGLSN0ir
.NET 7のMAUIについてMicrosoftのJames Montemgnoさんが語るみたい
0時から
https://youtu.be/qR_YlN3ZrLo

まぁ地図機能がほとんどだろうな
あとデュアルスクリーンか?
AndroidやiOSでもできるのだろうか?
68デフォルトの名無しさん
垢版 |
2022/09/25(日) 08:46:38.00ID:DIWRYevd
固有プラットフォームのコードを呼び出すやつって条件付きコンパイルとパーシャルクラス使うやつあるけどパーシャルクラスの利点ってなんですかね?
維持管理がしやすいとか?
条件付きコンパイルはifつければいいだけだから実装は簡単
2022/09/25(日) 15:38:50.86ID:eI3nstYC
xamarin.fomsだと、ホットリロードが効くのはxamlだけで
csファイルは再起動が必要だけど
MAUIはCSにもホットリロードが効くようになったの?
2022/09/25(日) 18:01:23.95ID:B1nX0Ni1
>>68
違いはねぇんじゃね。 あるとすれば、他のプラットフォームコードが視界に入ってこない事ぐらい。
Dependenciesにインターフェースレポジトリ継承宣言を置いてPlatformsにカキコするのはありきたり。 ドメイン駆動開発やっていれば常識。
ただ、上の方にもあったようだが、ドメイン駆動として、Core、Domain、Infrastructueのダイアゴナル構造にしようとすると、
クラスライブラリではPlatformsから参照できるものの、定義宣言から実装側を認識できないバグがあるので、現在は、MAUIでDDD開発はできない。
71デフォルトの名無しさん
垢版 |
2022/09/25(日) 19:46:23.83ID:DIWRYevd
>>70
ふーん
2022/09/25(日) 20:13:20.96ID:+uZ+5XyS
ガキかよ
73デフォルトの名無しさん
垢版 |
2022/09/25(日) 23:08:59.93ID:DIWRYevd
>>72
なんでだよ
理解したからふーんなんだろ
74デフォルトの名無しさん
垢版 |
2022/09/26(月) 00:17:53.00ID:aC/L4xEl
最近Twitterで.NET MAUIで検索して困ってる人に勝手にリプライ送るのが日課になってるわ
.NET MAUIで検索してるからMAUIだけだとヒットしない
2022/09/26(月) 00:45:17.09ID:Gt3ajrW+
マウイ島が引っかかるからmauiで検索できないんだよな
MSの命名センスが終わってるのはいつもの事だが
せめてXamarin引き継げばマシだったろうに
76デフォルトの名無しさん
垢版 |
2022/09/26(月) 00:55:05.74ID:aC/L4xEl
>>75
だよねw
あとC#もそのままTwitter検索かけれないから#csharpでやってるw
77デフォルトの名無しさん
垢版 |
2022/09/26(月) 00:59:24.96ID:aC/L4xEl
MAUIってまぁ英語がマルチプラットフォームアップUIだから仕方ないんだろうけどもうちょっとおしゃれな名前にしてほしいよな
紫基準としてるからアヤメから取ってAIrisとか
78デフォルトの名無しさん
垢版 |
2022/09/26(月) 01:06:20.35ID:aC/L4xEl
Azureみたいな存在感が欲しい
2022/09/26(月) 06:27:32.75ID:R0PD3Sxd
法律事務所みたいな名前もやだ
2022/09/26(月) 07:45:42.28ID:5vr5CeRQ
>>69
効かないよ
81デフォルトの名無しさん
垢版 |
2022/09/26(月) 08:04:38.21ID:aC/L4xEl
Flutterも効かないんじゃね?
ReactNativeは知らん
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況