3

我正在尝试将索引属性与两个索引器绑定。该物业看起来像这样

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].Image 解释为下一个参数。我错过了什么?

4

2 回答 2

5

问题是{Binding}标记扩展 - 它有一个delimiterwhich is ,

要解决这个问题,您可以使用以下符号...

<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; }
}
于 2013-04-07T19:43:36.963 回答
0

Windows Phone 不是 WPF,它主要是 Silverlight,Silverlight 不支持Indexer

  • 仅支持一维数组索引。

您可以尝试通过以下方式解决此问题:

a)尝试实现类似的东西Items[0][0],所以Items[0]会给你一个数组,你可以再次应用索引器。

b) 尝试用 实现这个逻辑IValueConverter

于 2013-04-07T17:26:17.953 回答