1

MVVMCross を使用して最初のアプリケーションを作成しようとしています。また、これは私の最初のモバイル アプリケーションでもあります。

私の ViewModel には、(カスタム オブジェクトに格納された) 配列があります。その次元は固定されています (2 行、3 列)。

public Table SearchBox {get;set;}

6つのセルを6つの異なるテキストビューにバインドしたい(今のところAndroidをターゲットにしています)カスタムコンバーターを書きました:

protected override string Convert(Table value, Type targetType, object parameter, CultureInfo culture)
        {
            string rowcol=parameter.ToString();
            int row =System.Convert.ToInt32( rowcol.Substring (0, 1));
            int col= System.Convert.ToInt32(rowcol.Substring(1,1));
            return value.CellValue(row,col);
        }

各 textview のこのバインディングで正しく動作しています:

 local:MvxBind="Text SearchBox,Converter=Table,ConverterParameter='00'" 

これまでのところ、とても良いです、そして私は自分自身をとても誇りに思っています. より良い方法はありますか?

次のステップは、textview の値を変更することです (ドラッグ アンド ドロップを使用しますが、それは別の日にします)。ConvertBack のプロトタイプは次のとおりです。

protected override Table ConvertBack(string value, Type targetType, object parameter, CultureInfo culture)

しかし、どうすれば配列の 1 つのセルだけを変更できますか? この方法でも可能ですか?

コンバーターを作成する前に、viewModel で配列を 6 つの変数に変換することを考えていました。しかし、私はむしろ私の配列を使用したい...

4

1 に答える 1

1

これまでのところ、とても良いです、そして私は自分自身をとても誇りに思っています. より良い方法はありますか?

これまでのところ良さそうです。

しかし、どうすれば配列の 1 つのセルだけを変更できますか? この方法でも可能ですか?

技術的には可能です。たとえば、カスタムの多次元ソース バインディングを使用して実行できます。

ただし、最初のプロジェクトでは、これはお勧めしません。少し技術的です。

一般的な C# のデータ バインディング (MvvmCross と Xaml の両方) は 1 次元のリストをサポートしているため、次のようなものにバインドすることもできますがText SearchBox[4]Text SearchBox[4][5](現在) 多次元配列をサポートしていないため、簡単にはできません。行うText SearchBox[4, 5]

これは、Xaml データ バインディングがサポートしていないためです。http://msdn.microsoft.com/en-us/library/cc645024%28VS.95%29.aspx の「Indexer」を参照してください。また、MvvmCross が使用されています。これをコードのベースラインとして使用します。

最も簡単な方法は、 ViewModelデータを多次元配列から遠ざけて、View でより簡単に消費される形状にすることだと思います。たとえば、データを複数ではなく配列の配列として整形できますか次元配列?

于 2013-09-13T08:44:55.480 に答える