2016-04-01 74 views
4

我在Android中有一個MvvmCross MvxSpinner綁定。用戶選擇一個值,並反映在我的財產MealTypeSelectedMvxSpinner初始值

<MvxSpinner 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    local:MvxBind="ItemsSource MealTypeList;SelectedItem MealTypeSelected, Mode=TwoWay" /> 

微調器允許用戶選擇膳食類型(早餐,午餐,晚餐等)。用餐類型由一個名爲MealType的Enum代表。

public enum MealType {Unspecified, Breakfast, Lunch, Dinner, Snack};

我想通過初始化微調器根據一天的時間值時,顯示的ViewModel,使其對用戶更加容易。因此,如果網頁在中午加載,那麼我猜測選擇應該是「午餐」。

的問題是,我試圖在生命週期的不同位置設置在ViewModelMealTypeSelected屬性:構造,InitStart。但是不管我做什麼,當視圖加載時,它會將選擇返回更改爲Enum的默認值,該值是「未指定」值。

是否有解決此問題的方法並已將MvxSpinner初始化爲特定值?

+1

從我記得,微調自動在其ItemsSource中選擇初始值。您可以初始化Spinner的ItemsSource,使第一個索引成爲一天中特定的MealType。 – pnavk

+0

這個工作,但現在我的微調列表是「午餐,未指定,早餐,午餐,晚餐,小吃」,當用戶點擊它。我想我可以做一些自定義佈局來澄清,但它不是理想的。 – thedigitalsean

回答

0

Stack Overflow不會讓我接受pnavk的評論作爲答案,但這是我最終做的。每次用戶選擇某項內容時,我都會將第一個項目更改爲所選內容。一個難看的解決方案,但它的工作。如果這不被別人接受,看起來你可能不得不做一些自定義綁定。

1

嘗試將其添加到「Setup.cs」文件中。我有同樣的掙扎,這對我有效。無法記住我第一次找到解決方案的位置。

protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry) 
    { 
     MvxAppCompatSetupHelper.FillTargetFactories(registry); 
     base.FillTargetFactories(registry); 
    } 
+0

我也曾在這個問題上絆倒過,但幸運的是,在我的Setup.cs中已經有了。除非你有這個綁定,否則綁定根本不起作用。在我的情況下,綁定正在工作,但我無法將初始選擇設置爲列表的第一個值之外的任何內容。 – thedigitalsean

+0

你可以嘗試使用viewmodel中的屬性來更新問題嗎? – Stupidus

1

當將MvxSpinner的SelectedItem綁定到ViewModel時,我也遇到了類似的問題,同時也將它設置在ViewModel中。

覆蓋我綁定的類型的Equals解決了這個問題。

public override bool Equals(object obj) 
{ 
    return this.Id == (obj as MyType)?.Id; 
} 

由於您似乎直接綁定到枚舉,您可能需要嘗試將其包裝在另一個對象中。

+0

這是真正的答案。對列表重新排序是一種解決方法。 – Jerome2606