1

我试图了解 Windows 商店示例中的示例游戏之一是如何工作的。特别是这个

http://code.msdn.microsoft.com/windowsapps/Reversi-XAMLC-sample-board-816140fa

我了解大部分情况(我认为),但我真的不知道这里发生了什么:

boardSpace.SetBinding(BoardSpace.SpaceStateProperty,
new Binding { Path = new PropertyPath(String.Format("[{0},{1}]", row, column)) });

我不明白 PropertyPath 到底绑定了什么。它似乎正在形成一些 2D 数组,因此它将 SpaceStateProperty 从游戏模型视图绑定到此 PropertyPath 但是如何将 [0,1] 或 [2, 2] 转换为某些特定实例或路径?

下一行更有意义: boardSpace.SetBinding(BoardSpace.CommandProperty, new Binding { Path = new PropertyPath("MoveCommand") });

这些将 BoardSpacebutton CommandProperty 绑定到在 GameViewModel 中公开的 MoveCommand 委托

现在我发现了一个像这样暴露的函数

public BoardSpaceState this[String index]

属性路径是否会绑定到 this 函数,因为它需要一个字符串,而 PropertyPath 只是一个字符串 [x,y]?它是怎么知道的?

我觉得我错过了关于 PropertyPath 工作方式的一个微妙部分,但阅读文档并没有多大意义。

我很感激任何帮助

4

1 回答 1

0

是的,这个绑定是到“this”属性,也称为索引器,它提供了一种直接索引到定义类的方法,就好像它是一个集合一样。因此,索引器是一种在指定索引但没有特定属性名称时使用的默认属性。

文档中的相关主题是Indexers (C# Programming Guide),其中包括以下代码片段(此处缩写):

class SampleCollection<T>
{
    // Define the indexer, which will allow client code 
    // to use [] notation on the class instance itself. 
    public T this[int i] { /* ... */ }
}

// Usage:
SampleCollection<string> stringCollection = new SampleCollection<string>();
stringCollection[0] = "Hello, World";

这不是绑定示例,但绑定中的概念是相同的。“[ index ]”的属性路径是对当前数据上下文的索引器属性的特定索引值的绑定(示例中的 GameViewModel 对象)。

于 2013-03-07T18:12:03.490 回答