배경 : 본질적으로, 내장 된 격자 구현이 너무 느려서 (우리는 동시에 스크롤되는 100,000 개의 셀을 처리 할 수 없기 때문에 사용자 정의 Android 렌더러로 Xamarin.Forms에서 Grid 시스템을 만들고 있습니다. 우리가 필요로하는). 나는 과잉 커플 링으로 이미이 작업을 성공적으로 마쳤습니다. 이제 감독관이 요청한 방식으로 리팩터링하고 있으므로 문제가 발생했습니다.컨테이너 개체에 속성이 변경된 개체에서 변경되었음을 알리는 방법은 무엇입니까?
시나리오 :
//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 변경된 것을 GridRenderer 볼 수 있도록 GridItems "본질적으로 GridItems 속성 변경 이벤트 발생 시키십시오"알릴 수있는 GridItems 필요하며 화면에서 다시 그리기 자체를 무효화하십시오.
속성이 속성 자체에서 변경되었다는 것을 포함하는 개체에 알리는 좋은 방법이 있습니까? 아니면이 문제에 대해 모두 잘못 접근하고 있습니까?
이것은 약간 순진 할 지 모르지만 [데이터 바인딩 가이드] (https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_bindings_to_mvvm/)를 보았습니까? 여기서 말하는 것처럼 들리는'PropertyChanged'를 일으킬 모델을 만들 수 있습니다. – Paul