1

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

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

public Table SearchBox {get;set;}

我想将我的六个单元格绑定到六个不同的文本视图(现在我的目标是 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 中的六个变量,这对于双向绑定来说是显而易见的。但我宁愿使用我的数组...

4

1 回答 1

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中的“索引器” - 并使用 MvvmCross这是其代码的基线。

我怀疑最简单的前进路线是将您的 ViewModel 数据从多维数组塑造成一个更容易被 View 使用的形状 - 例如,您可以将您的数据塑造为数组数组而不是多维数组吗?维数组?

于 2013-09-13T08:44:55.480 回答