【发布时间】:2016-10-22 07:15:40
【问题描述】:
背景:本质上,我正在使用自定义 Android 渲染器在 Xamarin.Forms 中创建一个 Grid 系统,因为内置的 Grid 实现对于我们正在尝试做的事情来说太慢了(它无法处理我们需要同时滚动 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 能够告诉 Grid“我已经改变,引发您的 GridItems 属性更改事件”,以便 GridRenderer 可以看到 GridItems 已经改变(因为 Grid 改变了)并且自身无效,在屏幕上重绘。
有没有一种好方法可以通知包含对象该属性已从属性本身更改?还是我在处理这个问题时都错了?
【问题讨论】:
-
这可能有点幼稚,但你看过data binding guide吗?您可以创建一个模型,该模型将能够提高
PropertyChanged,这听起来像您想要的,在这里。
标签: c# .net xamarin xamarin.forms inotifypropertychanged