[過去ログ] Microsoft .NET MAUI part9 [Xamarin] (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
27(1): 2022/09/19(月)08:23 ID:Guc0YHbo(1/10) AAS
 ナビゲーションメニュー初めて作って見たんだけどナビゲーション先でObservableCollectionにAddしたものがメインのCollectionViewに表示されるようにするにはどうすればいいんだろうか? 
 ナビゲーションバックでコレクションを更新すればよいのかな? 
28(1): 2022/09/19(月)08:42 ID:CegtP/3a(1) AAS
 >>27 
 逆に何で同じコレクションを使わないんだ 
29: 2022/09/19(月)09:59 ID:Guc0YHbo(2/10) AAS
 >>28 
 同じコレクション使ってるはずなんだけどページにそれを持ってこうとするとできないんよなぁ… 
 どうすればいいんだろうか? 
 違うページでObservableCollectionが入ってるクラスをnewしたら初期化されるかなぁ? 
30: 2022/09/19(月)10:23 ID:lsi5cYj1(1/5) AAS
 何を言ってるのかよくわからん 
 1つのObservableCollectionを2つのビューにバインドすればいいだけだろう 
 何をどうしたらそんなことになるんだ 
 それが再現できる最小のコードを作ってみたら動画のネタにもなるんじゃね 
 まさか2つのViewModelそれぞれに違うインスタンスのコレクションを追加して自動的に同期しないと悩んでるんじゃないだろうな 
31: 2022/09/19(月)10:44 ID:shikJWy/(1) AAS
 それなんじゃね 
 DIで別のインスタンスみてんじゃ 
32(1): 2022/09/19(月)11:35 ID:lsi5cYj1(2/5) AAS
 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 ID:Guc0YHbo(3/10) AAS
 こんな感じでObservableCollectionをDataCollectionとして作って 
 (DataSet.cs) 
 画像リンク
 
  
 Navigation先でAddしたやつを 
 (DetailPage.xaml.cs) 
 画像リンク
 
  
 MainPageのCollectionView(memoList)に反映させたい 
 (MainPage.xaml.cs) 
 画像リンク
 
34(1): 2022/09/19(月)12:20 ID:Guc0YHbo(4/10) AAS
 そういえばナビゲーション先のページAddTransientにしてたわ 
 AddSingletonにします。 
35: 2022/09/19(月)12:43 ID:Guc0YHbo(5/10) AAS
 newじゃなくて{get}だけでいいのかな? 
36(1): 2022/09/19(月)12:53 ID:lsi5cYj1(3/5) AAS
 AddTransientどうこうより先に2回newしてんじゃねーかw 
37: 2022/09/19(月)12:57 ID:lsi5cYj1(4/5) AAS
 >>34 
 ページはどうせアプリ終了まで生きてるからどうだっていいぞ 
38: 2022/09/19(月)14:21 ID:Guc0YHbo(6/10) AAS
 >>36 
 やっぱりnewが悪いのか… 
 newせずDataCollectionを使う方法ってありますか? 
39(2): 2022/09/19(月)14:26 ID:lsi5cYj1(5/5) AAS
 AddSingletonしろって言ったばかりだがもしかしてインスタンスの概念がわからない系? 
40(1): 2022/09/19(月)14:53 ID:Guc0YHbo(7/10) AAS
 >>39 
 ? 
 最初のnewはMainPageでいいんだよね? 
 そのナビゲーション先でDataListクラスの関数使おうとするとどう指定すればいいんだ? 
41(1): 2022/09/19(月)15:10 ID:oefI52tK(1/3) AAS
 >>40 
 いやだからnewしないの 
 さっき書いたコードのModelのとこを共有したいコレクションを持ったクラスに書き換える 
 するとサービスプロバイダーにそのクラスを要求したら最初の1回は自動的にnewされたインスタンスが返り、次からは同じインスタンスが返る 
 つまり何回要求しても同じものが返ってくるんだよ 
 ここではDIを使ってるからMainPageがMauiAppに作成された時点でViewModelが自動的にサービスプロバイダから注入され、ViewModelが作成された時点でModelが注入される 
 同じく別のページとそのVMもAddSingletonしとけばそのページに遷移した時にVMにモデルの同じインスタンスが注入される 
 同じインスタンスだから状態も共有する 
 newしたら別のインスタンスになっちゃうだろ? 
42(1): 2022/09/19(月)15:37 ID:Guc0YHbo(8/10) AAS
 >>41 
 うーんわからん… 
 Program.csに>>32を書けってこと? 
43(2): 2022/09/19(月)15:42 ID:oefI52tK(2/3) AAS
 >>42 
 MAUI使ってるんじゃねーの? 
 外部リンク[aspx]:www.syncfusion.com 
44: 2022/09/19(月)15:54 ID:Guc0YHbo(9/10) AAS
 >>43 
 なるほど! 
 これで共有のObservableCollectionを共有できるのか! 
 これって.NET MAUIからの新機能? 
45(1): 2022/09/19(月)15:56 ID:oefI52tK(3/3) AAS
 機能としては相当前からあるがここまでの圧をもって押し付けてくるのはMAUIからかな 
46: 2022/09/19(月)15:59 ID:Guc0YHbo(10/10) AAS
 >>45 
 ありがとう! 
47: 2022/09/19(月)19:25 ID:UixL+xz1(1) AAS
 >>39 
 みたいだね。  
 インスタンスがいまいちわかっていないみたい。 
48(3): 2022/09/20(火)18:48 ID:tcmFdYIT(1/4) AAS
 MAUI、CollectionViewがバグりすぎててガチで使えないwwwwwwww 
 ItemTemplate を設定してあるとき、バインド元のコレクションの要素の置き換えをやると画面上では要素が置き換わったように見えるが、置き換え前のビューもなぜかメモリ上に残ったままになるwwwwwwwう◯こwwwwwww 
49: 2022/09/20(火)18:52 ID:uMWd7f8R(1/2) AAS
 >>48 
 メモリ管理ができてないってこと? 
50: 2022/09/20(火)19:41 ID:+1ymuJNf(1) AAS
 >>48 
 こいつが使い方間違えてるのに50ペリカ 
51: 2022/09/20(火)19:43 ID:Pye1gVbz(1) AAS
 まさか上の続きなのか? 
52: 2022/09/20(火)19:51 ID:uMWd7f8R(2/2) AAS
 俺は.NET MAUIのこと悪く言わんよ 
 EditorコントロールがAndroidでは外側のグリッド(フレーム、スタックレイアウト含む)のWidthを参照しないって仕様は見つけたけど 
 ホリゾンタルオプションズをフィルにしても一文字分のWidthにしかならんやつ 
 もちろんちゃんとWidthリクエストすれば問題ない 
53: 2022/09/20(火)20:34 ID:+UHOIJTp(1) AAS
 まあ現象再現する最小コードでも上げてもらわないと何とも言えんわな 
54: 2022/09/20(火)20:47 ID:4OsfujaD(1) AAS
 >>48 
 それはパフォーマンスを優先するために画面の再描画をしてないだけ 
 RxのThrottle使え 
55: 2022/09/20(火)23:22 ID:nDZPLz9M(1) AAS
 debounceとかthrottleとかそういうのを知らずにゴリゴリ押して苦しんでる人結構多いよね。 
 webはおもちゃ、ゲームも所詮おもちゃ、とか言って叩いて無視しすぎたんじゃないかなって思うわ。 
56: 2022/09/20(火)23:29 ID:tcmFdYIT(2/4) AAS
 プロジェクト作って、 
 MainPage.xaml 
 <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="<外部リンク:schemas.microsoft.com xmlns:x="<外部リンク:schemas.microsoft.com 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万回ぐらい押すとわかると思うよ 
上下前次1-新書関写板覧索設栞歴
あと 946 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.020s