2017-02-10 8 views
1

問題: - ローカル:MvxLangがXamarinアプリケーションのMvxListViewのitemtemplateの一部である場合にリソーステキストをTextViewにバインドできませんでしたMVVMCrossのローカリゼーション機能を使用します。ローカル:MvxListがXamarinアプリケーションのMvxListViewのitemtemplateの一部であるときにMvxLangがTextViewにバインドできませんでした

私のアプリケーションはMVVMCrossを使用したXamarin.androidで、MVVMCrossのローカリゼーション機能をresxファイルとともに使用しています。 実行するサンプルはここで見つけることができます:https://github.com/pallaviak1/RestaurantBilling.Droid

私はのviewmodelに構文の下に使用してコードをローカライズされた文字列(AllBillsViewModel)BillClickedCommand取得しています: - :mvxLangがボタンの属性である地元の私のメインビューページはまた

_dialogService.ShowAlertAsync(string.Format(TextSource.GetText("InformationReceivedMessage"), bill.CustomerEmail, bill.AmountPaid), TextSource.GetText("InformationReceivedHeader"), TextSource.GetText("InformationReceivedButtonText")); 

を選択した文化のリソースからのボタンテキストも表示され、うまく機能します。

<Button ... local:MvxLang="Text ViewBillsResourceText" local:MvxBind="Click NavigateAllBills" /> 

問題: -しかし、私はコントロールでMvxLangを使用していたときにMvxListViewの項目テンプレートの一部であるローカライズされた文字列を制御する(取り込まれていない)空白になっています。

ファイル: - 項目テンプレートビューの一部である RestaurantBilling.Droid \ RestaurantBilling.Droid \リソース\レイアウト\のListItem_Bill.axml

制御は以下のようになります -

<TextView android:layout_alignParentBottom="true" 
android:layout_marginLeft="50dp" 
android:layout_marginRight="16dp" 
android:layout_width="90dp" 
android:layout_height="wrap_content" 
local:MvxLang="Text CustomerEmailTextView" /> 

-

<Mvx.MvxListView 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"  
local:MvxBind="ItemsSource AllBills; ItemClick BillClickedCommand" 
local:MvxItemTemplate="@layout/listitem_bill" /> 

CustomerEmailTextViewリソースキーは、名前としてresxファイルに存在します。 :AllBillsViewModel.CustomerEmailTextView、値: "US Customer Email"。 リソースファイルはライブラリMVVMCross.Localizationに存在し、参照はRestaurantBilling.coreライブラリとandroidプロジェクトに追加されています。コアで

コード、App.csは以下のようにファイル: -

Mvx.RegisterSingleton<IMvxTextProvider> 
       (new ResxTextProvider(Strings.ResourceManager, currentCulture)); 

BaseViewModelはコードの下にあります: - :

[0:] MvxBind:Warning: 9.78 Unable to bind: source property source not found Property:TextSource on Bill 
02-10 07:41:52.020 I/MvxBind (4357): 9.78 Unable to bind: source property source not found Property:TextSource on Bill 

public IMvxLanguageBinder TextSource => 
      new MvxLanguageBinder("", GetType().Name); 

次のようにVisual Studioの出力ウィンドウに警告の取得

MVVMCross公式サイトで十分なヘルプが見つからず、同じことについて多くの議論ができませんでした。同じことが、複数のトレーニングから参照されたときにダウンロードされたサンプル「My Trains」で動作しています。

助けてください。

答えて

2

問題が解決しました。 refリンク:How to bind ItemClick in MvxListView in MvxListView

このリンクの問題は多少似ています。私は以下の方法で問題を解決しました

私がviewModelに追加したTextSourceプロパティは何でも、私はBillに入れる必要があります。モデルであるCSクラスが

public IMvxLanguageBinder TextSource 
    { 
     get { 
      //Mvx.Trace("****************TextSource get in bill.cs**************************"); 
      return new MvxLanguageBinder("", GetType().Name); 
     } 
    } 

次に、リソーステキストキーは、以下のようになります -

Bill.CustomerEmailTextView 

これは、回避策の一種である、実際にBaseViewModelしかしTextSource性を有していることは、アイテムの場合には有用ではありませんテンプレートケース。

私たちがビューモデルとモデルのプロパティを混合しているので、より良いソリューションがあれば教えてください。

関連する問題