我正在尝试使用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中的六个变量,这对于双向绑定来说是显而易见的。但我宁愿使用我的阵列...
答案 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使用的形状 - 例如你可以将数据整形为数组而不是多维数组吗?