Mały problem z moją aplikacją na Androida i nie wiem jak rozwiązać problem z MVVM Cross.MVVMCross zmieniając ViewModel w MvxBindableListView
Oto mój model
public class Article
{
string Label{ get; set; }
string Remark { get; set; }
}
My ViewModel
public class ArticleViewModel: MvxViewModel
{
public List<Article> Articles;
....
}
Moja layout.axml ...
<LinearLayout
android:layout_width="0dip"
android:layout_weight="6"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/layoutArticleList">
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/editSearch"
android:text=""
android:singleLine="True"
android:selectAllOnFocus="true"
android:capitalize="characters"
android:drawableLeft="@drawable/ic_search_24"
local:MvxBind="{'Text':{'Path':'Filter','Mode':'TwoWay'}}"
/>
<Mvx.MvxBindableListView
android:id="@+id/listviewArticle"
android:choiceMode="singleChoice"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
local:MvxItemTemplate="@layout/article_rowlayout"
local:MvxBind="{'ItemsSource':{'Path':'Articles'}}" />
</LinearLayout>
...
I tu moje problemu, "article_rowlayout"
...
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/blue">
<TextView
android:id="@+id/rowArticleLabel"
android:layout_width="0dip"
android:layout_weight="14"
android:layout_height="wrap_content"
android:textSize="28dip"
local:MvxBind="{'Text':{'Path':'Label'}}" />
<ImageButton
android:src="@drawable/ic_modify"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="wrap_content"
android:id="@+id/rowArticleButtonModify"
android:background="@null"
android:focusable="false"
android:clickable="true"
local:MvxBind="{'Click':{'Path':'MyTest'}}"
/>
...
Komenda "Kliknij" o nazwie "MyTest" jest połączona z elementem podanym przez MvxBindableListView. Innymi słowy, kliknij Wyszukaj polecenie "MyTest" w moim modelu "Artykuł", zamiast mojego ViewModel. Jak mogę zmienić to zachowanie, aby połączyć mój ViewModel "ArticleViewModel", który jest odpowiedzialny za mój MvxBindableListView?
Wszelkie sugestie?
W rzeczywistości, mam 4 imagebuttons z zachowania na moim ListView. Tak więc pierwsze rozwiązanie jest niemożliwe. Po drugie, moim problemem jest to, że przeglądam moją listę z innego frameworka (vici coolstorage), i parsowanie całej listy w celu stworzenia nowej z "ActiveArticle" spowoduje poważne obciążenie (mogę mieć kilka tysięcy pozycji). Ale w każdym razie spróbuję tego rozwiązania i dam znać, czy to działa. A propos, nie sądzisz, że trudno będzie stworzyć "RelativeSource" w twojej strukturze? Dzięki! – hugoterelle
Dodano opcję dla Ciebie - zobacz aktualizację w odpowiedzi. Dla "Nawiasem mówiąc, nie sądzisz, że będzie to trudne", to wymagałoby jakiegoś sposobu zidentyfikowania źródła krewnych na wszystkich platformach (np. Może wymagać użycia jakiegoś sposobu poruszania się w hierarchii nadrzędnej w Droid), a następnie określenia, która właściwość powiązać z (widok macierzysty Droid nie ma wygodnego obiektu zależności DataContext). To może być możliwe - chciałbym zobaczyć, co chcesz - możesz zaprojektować swoje idealne rozwiązanie axml jako problem w github/slodge/mvvmcross – Stuart
Witam Stuart, nowe rozwiązanie jest dla mnie rozwiązaniem. Wielkie dzięki. Umieszczam twoje rozwiązanie w moim kodzie, a ja umieszczę "idealną wizję axml" (dla mnie) jako problem w github. Jeszcze raz dziękuję, jesteś świetny! – hugoterelle