2017-06-16 102 views
0

我正在用Xamarin和MVVMCross構建一個原生的android項目。我正在使用一個Mvx.MvxSpinner作爲元素來加載我的數據(這是MVVMCross的方式)。Xamarin,MVVMCross顯示DisplayMemberPath而不是

我有以下問題:我有一個類與不同的數據元素和一個微調,我綁定一個new List<DataClass>()其中的元素。 是否有實際綁定到數據類的名稱屬性(同WPF DisplayMemberPath

數據類的方式:

public class DataClass 
{ 
    public string Name { get; set; } 
} 

視圖模型:

public ObservableCollection<DataClass> Lines 
{ 
    get => GetPropertyValue<ObservableCollection<DataClass>>(); 
    set => SetPropertyValue(value); 
} 

查看:

<Mvx.MvxSpinner 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    local:MvxBind="ItemsSource Lines; SelectedItem SelectedLine" /> 
+0

我也可以只使用一個適配器,如果這是不可能的。 – kevingoos

+0

如果在XML綁定中將「SelectedLine」更改爲「SelectedLine.Name」,會發生什麼情況? –

回答

3

Def ault方法

默認情況下,MvvmCross將只調用您所列模型的ToString。因此,您可以覆蓋ToString以返回名稱。

public class DataClass 
{ 
    public string Name { get; set; } 

    public override string ToString() => Name; 
} 

模板方法

如果你想在外觀更多的控制和感覺,以及綁定您可以創建自定義XML模板。

<Mvx.MvxSpinner 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    local:MvxBind="ItemsSource Lines; SelectedItem SelectedLine" 
    local:MvxDropDownItemTemplate="@layout/item_template_dropdown" 
    local:MvxItemTemplate="@layout/item_template_spinner" /> 

MvxItemTemplate是模板使用時控制處於靜止的狀態下(默認)。當微調器處於選擇狀態時,MvxDropDownItemTemplate是模板使用。

項目模板例如

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:local="http://schemas.android.com/apk/res/Project.Ui.Droid" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     local:MvxBind="Text Name" /> 
</FrameLayout>