【问题标题】:Binding to multiple indexers绑定到多个索引器
【发布时间】:2025-12-06 18:40:01
【问题描述】:

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

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

【问题讨论】:

    标签: wpf binding windows-phone indexed-properties


    【解决方案1】:

    问题在于{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; }
    }
    

    【讨论】:

    • 谢谢!它在 标记内工作。至于转义,我已经尝试过了,但是参数似乎被解释为单个字符串参数,并且绑定不适用于错误消息“参数计数不匹配”。
    • 不客气 - 是的,他们似乎已经为 Path 树立了榜样,就像我第一次做的那样 - 不转义它是行不通的。
    • 辉煌一直在寻找这个:)
    【解决方案2】:

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

    • 仅支持一维数组索引。

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

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

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

    【讨论】:

    • 实际上我在 WPF 中得到了相同的行为。