除了斯文 - 邁克爾,你可以通過創建一個繼承豐富他的代碼,你ListView
(如果你不已經有一個),並添加一個Delegate
它是這樣的:
public class AccessoryListView : ListView
{
public delegate void OnAccessoryTappedDelegate();
public OnAccessoryTappedDelegate OnAccessoryTapped { get; set; }
}
從您的自定義呈現
現在 - 不要忘了將它設置爲你的新繼承ListView
- 調用該委託
public class ContactListViewRenderer : ListViewRenderer, IUITableViewDelegate
{
private AccessoryListView _formsControl;
protected override void OnElementChanged(ElementChangedEventArgs<AccessoryListView> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.WeakDelegate = this; // or. Control.Delegate
}
if (e.NewElement != null)
_formsControl = e.NewElement;
}
public virtual void AccessoryButtonTapped(UITableView tableView, NSIndexPath indexPath)
{
// accessory tapped
if (_formsControl.OnAccessoryTapped != null)
_formsControl.OnAccessoryTapped();
}
}
當然,你可以添加這樣我的參數在那裏爲您的共享代碼提供更多的數據。有了這個,你確實有一些特定於平臺的代碼,但你會盡快回到你的共享代碼中,使你的代碼更加可重用。
另一個帶有Map控件的示例可以在here找到。
謝謝,史文邁克爾,我會嘗試。設置'WeakDelegate'安全嗎? :)我認爲它已經設置爲一些默認的實現。 – rudyryk