Vấn đề nhỏ với ứng dụng Android của tôi và tôi không biết cách giải quyết nó với MVVM Cross.MVVMCross thay đổi ViewModel trong một MvxBindableListView
Đây là mẫu của tôi
public class Article
{
string Label{ get; set; }
string Remark { get; set; }
}
My ViewModel
public class ArticleViewModel: MvxViewModel
{
public List<Article> Articles;
....
}
layout.axml My ...
<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>
...
Và ở đây có vấn đề của tôi, "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'}}"
/>
...
Lệnh "Nhấp" được gọi là "MyTest" được liên kết trên mục được MvxBindableListView cung cấp. Nói cách khác, nhấp vào tìm kiếm một lệnh "MyTest" trong mô hình "Article" của tôi, thay vì ViewModel của tôi. Làm thế nào tôi có thể thay đổi hành vi đó để liên kết ViewModel của tôi "ArticleViewModel" chịu trách nhiệm về MvxBindableListView của tôi?
Mọi đề xuất?
Trong thực tế, tôi có 4 imagebuttons với hành vi trên listview của tôi. Vì vậy, giải pháp đầu tiên là không thể. Đối với vấn đề thứ hai, vấn đề của tôi là tôi xem lại danh sách của mình từ một khung công tác khác (phân vùng) và phân tích toàn bộ danh sách để tạo một danh sách mới với "ActiveArticle" sẽ đặt một chi phí nghiêm trọng (tôi có thể có hàng nghìn mục). Nhưng dù sao, tôi sẽ thử giải pháp này và cho bạn biết nếu nó hoạt động. Nhân tiện, bạn có nghĩ rằng sẽ khó tạo ra một "RelativeSource" trên khuôn khổ của bạn? Cảm ơn! – hugoterelle
Đã thêm một giải pháp thay thế cho bạn - hãy xem cập nhật trong câu trả lời. Đối với "Nhân tiện, bạn không nghĩ rằng nó sẽ khó" nó sẽ đòi hỏi một số cách để xác định người thân trên tất cả các nền tảng (ví dụ: nó có thể phải sử dụng một số cách điều hướng hệ thống phân cấp cha trong Droid) và sau đó xác định thuộc tính nào để liên kết với (chế độ xem gốc của Droid không có DataContext DependencyObject thuận tiện). Nó có thể là có thể - sẽ được quan tâm để xem những gì bạn muốn - cảm thấy tự do để dự thảo những gì giải pháp axml lý tưởng của bạn có thể trông giống như một vấn đề trong github/slodge/mvvmcross – Stuart
Hi Stuart, bạn giải pháp mới là giải pháp cho tôi. Cảm ơn rất nhiều. Tôi đặt giải pháp của bạn trong mã của tôi, và tôi sẽ đặt "tầm nhìn lý tưởng axml" (đối với tôi) như là một vấn đề trong github. Cảm ơn một lần nữa, bạn là tuyệt vời! – hugoterelle