绑定到多个索引器

时间:2013-04-07 17:14:26

标签: wpf binding windows-phone indexed-properties

我正在尝试使用两个索引器绑定索引属性。该属性看起来像这样

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]。图像作为下一个参数。我错过了什么?

2 个答案:

答案 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实现此逻辑。