Ala*_*an2 5 c# xamarin xamarin.forms
我正在使用此自定义渲染器:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我读到了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;
//...
Run Code Online (Sandbox Code Playgroud)
但不是在这里.有必要这样做Cell = tv.DequeueReusableCell吗?
我读到,使用 TextCellRenderer 不再需要显式订阅属性更改事件,因为有一个基本的可重写方法 HandlePropertyChanged 可以在此上下文中重复使用。
是的,根据其源代码,这是正确的
protected virtual void HandlePropertyChanged(object sender, PropertyChangedEventArgs args) {
//...
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我 ViewCellRenderer 是否也是这种情况,如果是的话,我该如何修改此代码以利用它?
不,情况也不是这样,ViewCellRenderer根据源代码ViewCellRenderer 没有ViewCellPropertyChanged按原样公开它private
void ViewCellPropertyChanged(object sender, PropertyChangedEventArgs e) {
//...
}
Run Code Online (Sandbox Code Playgroud)
您始终可以自己修改它并创建拉取请求来添加该功能。