背景:基本的には、カスタムのAndroidレンダラを使用してXamarin.Formsにグリッドシステムを作成しています。これは、組み込みのグリッド実装では、実行しようとしているものが遅すぎます(100,000のセルを同時にスクロールすることはできません。我々が必要とする)。私は超過カップリングでこれを既に成功させました。私は上司が尋ねたようにリファクタリングしているので、私は問題に遭遇しました。プロパティが変更されたオブジェクトから変更されたことをコンテナオブジェクトに通知するにはどうすればよいですか?
シナリオ:
//In Xamarin.Forms project
class GridItems : BindableObject {
//Handles/contains all logic to how this grid will be laid out and its children
}
//In Xamarin.Forms project
class Grid : View {
GridItems Source { get; set; }
}
//In Xamarin.Android project
class GridRenderer {
OnElementPropertyChanged() {
//Here I can check what properties inside Grid changed
}
}
これは明らかに非常に単純化しているが、その理由は、それはあなたが単にサブクラスGridItemsはグリッドがでとるのアイテムの種類を変更することができるようにこの方法はセットアップで、どのようなセル/列の文字列値は等であり、GridクラスとGridRendererクラスを再利用する必要があります。
問題:GridItems自体内で変更された場合
、私はGrid.GridItemsに通知する必要があります。 GridItemsはプロパティの変更イベントを発生させることができますが、ローカルプロパティに対してのみ発生します。私は本質的にGridItemsがGridItemsが変更されたことをGridRendererが(Gridが変更されたので)変更し、それを無効にして、画面上で再描画するのをGridRendererが見ることができるように、
プロパティは、プロパティ自体から変更されたことを含むオブジェクトに通知するための良い方法はありますか?あるいは、私はこの問題にすべて迷っていますか?
これはちょっと単純かもしれませんが、[データバインディングガイド](https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_bindings_to_mvvm/)を見てきましたか? 'PropertyChanged'を上げることができるモデルを作成することができます – Paul