我正在尝试使用两个索引器绑定索引属性。该属性看起来像这样
public Item this[int x, int y]
{
get { return _items[x, y]; }
set { _items[x, y] = value; }
}
根据http://msdn.microsoft.com/en-us/library/ms742451.aspx,可以绑定索引属性,如
<object Path="propertyName[index,index2...]" .../>
甚至有一个例子:
<Rectangle Fill="{Binding ColorGrid[20,30].SolidColorBrushResult}" .../>
然而,当我尝试在XAML中访问该属性时:
<Image Source="{Binding Items[0,0].Image}" />
我在设计师中遇到错误:
未命名的参数“0] .Image”必须出现在命名参数之前。
似乎解释为0]。图像作为下一个参数。我错过了什么?
答案 0 :(得分:5)
问题在于{Binding}
标记扩展程序 - delimiter
为,
。
要解决此问题,您可以使用以下表示法......
<TextBox Width="100" Height="100">
<TextBox.Text>
<Binding Path="MyIndexer[1,1]" />
</TextBox.Text>
</TextBox>
或者使用带有,
的'转义'\
- 这也在该链接中(但不知何故,他们已经得知他们的原始符号不起作用)。
<TextBox Text="{Binding MyIndexer[2\,2]}" Width="100" Height="100" />
请注意,索引器,多维数组语法是这样的:)...
public string this[int x, int y]
{
get { return _items[x][y]; }
set { _items[x][y] = value; }
}
答案 1 :(得分:0)
Windows Phone不是WPF,主要是Silverlight,Silverlight不支持Indexer:
- 仅支持一维数组索引。
您可以尝试通过以下方式解决此问题:
a)尝试实现类似Items[0][0]
的内容,因此Items[0]
会为您提供一个阵列,您可以再次应用索引器。
b)尝试使用IValueConverter
实现此逻辑。