我正在使用此自定义渲染器:
public class ExtViewCellRenderer : ViewCellRenderer
{
UITableViewCell _nativeCell;
public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv)
{
_nativeCell = base.GetCell(item, reusableCell, tv);
var formsCell = item as ExtViewCell;
if (formsCell != null)
{
formsCell.PropertyChanged -= OnPropertyChanged;
formsCell.PropertyChanged += OnPropertyChanged;
}
SetTap(formsCell);
return _nativeCell;
}
void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
var formsCell = sender as ExtViewCell;
if (formsCell == null)
return;
if (e.PropertyName == ExtViewCell.NoTapProperty.PropertyName)
{
SetTap(formsCell);
}
}
private void SetTap(ExtViewCell formsCell)
{
if (formsCell.NoTap)
_nativeCell.SelectionStyle = UITableViewCellSelectionStyle.None;
else
_nativeCell.SelectionStyle = UITableViewCellSelectionStyle.Default;
}
}
我用TextCellRenderer
读取它不再需要显式订阅property-changed-event,因为有一个可在此上下文中重用的基本可覆盖方法HandlePropertyChanged
。
有人可以告诉我,ViewCellRenderer
是否也是这种情况,如果是,那么我怎么能修改这段代码才能使用它呢?
我还在另一个渲染器中看到了这样的代码:
public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv)
{
var textCell = (TextCell)item;
var fullName = item.GetType().FullName;
cell = tv.DequeueReusableCell(fullName) as CellTableViewCell;
//...
但不是在这里。是否有必要这样做Cell = tv.DequeueReusableCell
?
答案 0 :(得分:2)
我读到使用TextCellRenderer时,不再需要显式订阅property-changed-event,因为有一个可在此上下文中重用的基本可覆盖方法HandlePropertyChanged。
根据其源代码
,这是正确的protected virtual void HandlePropertyChanged(object sender, PropertyChangedEventArgs args) {
//...
}
有人可以告诉我ViewCellRenderer的情况是否也是如此,如果是的话,我怎么能修改这段代码才能使用它呢?
不是ViewCellRenderer
的情况也不是这样,因为根据源代码ViewCellRenderer未公开其ViewCellPropertyChanged
,因为它是private
void ViewCellPropertyChanged(object sender, PropertyChangedEventArgs e) {
//...
}
您可以随时自行修改并创建拉取请求以添加该功能。