Pequeño problema con mi aplicación Android y no sé cómo resolverlo con MVVM Cross.MVVMCross cambia ViewModel dentro de una MvxBindableListView
Aquí es mi modelo
public class Article
{
string Label{ get; set; }
string Remark { get; set; }
}
Mi modelo de vista
public class ArticleViewModel: MvxViewModel
{
public List<Article> Articles;
....
}
Mi 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>
...
Y aquí viene mi problema, el "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'}}"
/>
...
El comando "Hacer clic" llamado "MyTest" está vinculado al elemento proporcionado por MvxBindableListView. En otras palabras, haga clic en buscar un comando "MyTest" en mi modelo "Artículo", en lugar de mi ViewModel. ¿Cómo puedo cambiar ese comportamiento para vincular mi ViewModel "ArticleViewModel" que es responsable de mi MvxBindableListView?
¿Alguna sugerencia?
De hecho, tengo 4 imagebuttons con el comportamiento de mi vista de lista. Entonces la primera solución es imposible. Para el segundo, mi problema es que revelé mi lista desde otro framework (vici coolstorage), y analizar toda la lista para crear una nueva con "ActiveArticle" representará una carga importante (puedo tener varios miles de elementos). Pero de todos modos, probaré esta solución y te dejaré saber si funciona. Por cierto, ¿no crees que será difícil crear un "RelativeSource" en tu framework? ¡Gracias! – hugoterelle
Han agregado una alternativa para usted - vea la actualización en la respuesta. Para "Por cierto, ¿no crees que será difícil?" Requeriría alguna forma de identificar el origen de todas las plataformas (por ejemplo, podría tener que usar alguna forma de navegar la jerarquía principal en Droid) y luego identificar qué propiedad para enlazar (las vistas nativas de Droid no tienen un conveniente DataContext DependencyObject). Podría ser posible, estaría interesado en ver lo que le gustaría, siéntase libre de redactar cómo podría verse su solución axml ideal como un problema en github/slodge/mvvmcross – Stuart
Hola Stuart, tu nueva solución es LA solución para mí. Muchas gracias. Puse su solución en mi código, y pondré la "visión axml ideal" (para mí) como un problema en github. ¡Gracias de nuevo, eres genial! – hugoterelle