如何在mvvmcross中绑定数组

时间:2013-09-13 00:24:36

标签: android mvvmcross

我正在尝试使用MVVMCross创建我的第一个应用程序。这也是我的第一个移动应用程序。

在我的ViewModel中,我有一个数组(存储在自定义对象中)。它的尺寸是固定的(2行,3列)。

public Table SearchBox {get;set;}

我想将我的六个单元格绑定到六个不同的textview(现在我的目标是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)

但是我怎么能只修改我的数组的一个单元格呢?这样甚至可能吗?

在创建转换器之前,我正在考虑将我的数组转换为viewModel中的六个变量,这对于双向绑定来说是显而易见的。但我宁愿使用我的阵列...

1 个答案:

答案 0 :(得分:1)

  

到目前为止,这么好,我为自己感到骄傲。还有更好的方法吗?

到目前为止看起来不错。

  

但是我怎么能只修改我的数组的一个单元格呢?这样甚至可能吗?

从技术上讲,它可能是有可能的 - 例如,你可以使用一些自定义的多维源绑定来实现它。

然而,对于第一个项目,我不推荐这个 - 它有点技术性。

一般C#数据绑定(包括MvvmCross和Xaml)都支持一维列表 - 所以你可以绑定到像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使用的形状 - 例如你可以将数据整形为数组而不是多维数组吗?