2

MvvmCross を使用してアプリをリファクタリングしています。WP7、Android、iPhone の 3 つのプラットフォームで設定ビューを表示する作業を行っています。2 つのリストを保持する SettingsViewModel を作成しました。1 つはサーバーをポーリングするための更新頻度を持ち、もう 1 つはポーリングするサーバーの情報を持ちます。これらは、UpdateFrequency および PublicSites と呼ばれます。2 つのリストにはそれぞれ、SettingsViewModel にプロパティがあり、どの UpdateFrequency とどのサイトが選択されているかを判断します (UpdateFrequency と SelectedSite)。

WP7 では、このデータは次のように ListPicker にバインドされます。

<toolkit:ListPicker 
    Name="UpdateFrequencies"
    ItemsSource="{Binding UpdateFrequencies}"
    SelectedItem="{Binding UpdateFrequency, Mode=TwoWay}"
    Header="Real-time data update frequency"
    />

設定ビュー WP7

同様に Android では、次のように Spinner にバインドされます。

<cirrious.mvvmcross.binding.android.views.MvxBindableSpinner
    android:id="@+id/SpinnerUpdateFrequencies"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    local:MvxDropDownItemTemplate="@layout/spinneritem_updatefrequencydropdown"
    local:MvxItemTemplate="@layout/spinneritem_updatefrequency"
    local:MvxBind="{'ItemsSource':{'Path':'UpdateFrequencies'},'SelectedItem':{'Path':'UpdateFrequency','Mode':'TwoWay'}}"
    />

設定View Android

今、私はiPhoneで同じことをしようとしていますが、同様の方法でバインドする方法に頭を悩ませているようには見えません。私は見つけることができるすべてのサンプルを調べてきましたが、似たようなものを見つけることができないようです. 誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

2

mvvmcross ios ソースには現在これが含まれていないため、独自に作成する必要があります。

モノタッチ ダイアログを使用している場合、これは、新しい要素タイプを作成し、これを使用して静的テキスト フィールド (現在の値) とピッカー ビュー (選択肢のリスト) の両方を表示する必要があることを意味します。

幸いなことに、これは現在の TimeElement と DateElement が行うことと非常に似ているため、これらのいずれかを開始テンプレートとして使用できます。このテンプレートを適応させるには、次のことを行う必要があります。

  • Value が DateTime ではなく String に基づくように変更します
  • List パブリック プロパティを追加します。これは Choices のリストになります。これは public でプロパティであるため、データ バインディングに自動的に使用できます。
  • Selected ハンドラーを調整して、Element がタップされたときに日付または時刻のピッカー ビューではなく単純なテキスト ベースのピッカー ビューを表示するようにします。 archive/2010/01/07/uipicker-in-the-iphone-with-monotouch.aspx) - または上記の @r4j からのアドバイスに従ってください
  • (Choices から) 正しい値を表示し、デフォルトで現在の Value になり、ピッカーが完了したときに Value を設定するピッカー ビュー モデルを追加します (Value を設定すると、バインドされた ViewModel プロパティも更新されます)。

このアプローチでは、ピッカーが表示されている間は値と選択肢のリストが変更されないことを前提としていますが、これはほとんどの用途で非常に安全な前提です。

申し訳ありませんが、現在サンプル コード (またはライブラリへの追加) を提供できません。他の誰かが私を打ち負かしていない場合は、数日後に開発ボックスに戻ったときに追加しようとします.


追加のアイデアとして、これらの設定の ui を提供するための代替アプローチの 1 つは、monotouch.dialog 内でラジオ/ラジオ グループ アプローチを使用することです。ただし、これには少し新しい要素の作業も必要になると思います。現在のラジオの実装は、選択肢のリストを動的に操作 (バインド) するように設定されていないためです。時間ができたら、これも追加することを検討します-非常に便利な追加になると思います.

于 2012-08-29T23:23:52.053 に答える
1

iOS には、ドロップダウン リストやリストビューのようなものはありません。私はあなたと同じ問題を抱えていました。
これが私の試みです:

  • を作成しUITextField、そのデータを選択項目としてバインドします。
  • この TextField の TouchDown イベントを発生させます。ユーザーがそれに触れると、別のビューに転送します (View2 を呼び出します)。

  • View2 で、TableViewViewModel からバインディング リスト データを作成します。ユーザーがアイテムを選択すると、前のビューに戻り、UITextField新しく選択されたアイテムで更新されます。

この助けを願っています!

更新:
あなたが言及したように、私は忘れていUIPickerViewました。しかし、私UIPickerViewはあまりにも多くのスペースを占めると思います。
私は以前にこれを行いました:UITextFieldユーザーがタッチしたときにを使用actionsheetし、ピッカービューでを表示し、アイテムを選択してから更新しUITextfiledます。ユーザーがキャンセルまたはアイテムを選択できる場所に、キャンセル、完了ボタンを配置できるのでお
勧めします。ActionSheetDatePickerを使用するxamarinの例を次に示します。actionsheet

于 2012-08-29T14:32:10.543 に答える