的問題是相同的,與MVVMCross不是編程,但我不知道是否有一個「跨平臺」的解決方案:當單擊ListView上的ImageButton時,MVVMCross是否可以更改選擇器?
在使用上MvxBindableListView一個的ImageButton(或一個ListView),我們必須把某些選項,以便使用此按鈕上的動作:
<ImageButton
...
android:focusable="false"
android:clickable="true"
...
local:MvxBind="'Click':{'Path':'Command1'}}"
/>
使用這些參數,按鈕對「Command1」作出反應。 但問題是ListView的「視覺選擇器」沒有改變。
讓我們舉一個例子:
當你在你的ListView 5行,第一個被選中。我觸摸第三行的ImageButton,「Command1」將響應(與ListView的第三項),但選擇器將停留在第一行。
因此,在Android中,我們必須把某種這樣的代碼:
_imagebutton.Click += (object sender, EventArgs eventsArgs) =>
{
View v = ...
MvxBindableListView l = ...
int p = l.GetPositionForView(...);
l.PerformItemClick(..., p, p);
};
隨着這段代碼右邊的項目選擇和行爲是正確的(只要我不想用ItemClick發射一個真實的事件)。但這個解決方案是「Android方式」,並不是真正的跨平臺(我讓你想象一下可怕的代碼來初始化所有這些東西)
有人有更好的解決方案嗎?
雨果
嗨,斯圖亞特,再次感謝您的快速回答。看起來Android對_adapterView.SetSelection((int)值)沒有反應。這就是爲什麼我必須在正確的位置上對ListView執行PeformItemClick。不過,你的解決方案更漂亮,因爲它本身就是鏈接在ListView上的。我會嘗試從MvxBindableListView繼承,只要我有時間(截止日期快到了!) – hugoterelle
AdapterView似乎在這裏響應SetSelection - 但也許這取決於你的「視覺選擇器」是什麼。我認爲state_selected和state_pressed是有區別的 - 但我不是這方面的專家! – Stuart