问题
I am trying to bind an indexed property with two indexers. The property looks like this
public Item this[int x, int y]
{
get { return _items[x, y]; }
set { _items[x, y] = value; }
}
According to http://msdn.microsoft.com/en-us/library/ms742451.aspx, it is possible to bind against indexed properties like that
<object Path="propertyName[index,index2...]" .../>
There is even an example:
<Rectangle Fill="{Binding ColorGrid[20,30].SolidColorBrushResult}" .../>
However when I try to access that property in XAML like that:
<Image Source="{Binding Items[0,0].Image}" />
I get an error in the designer:
The unnamed argument "0].Image" must appear before named arguments.
It seems to interpret 0].Image as the next argument. What am I missing?
回答1:
The problem is the {Binding}
markup extension - which has a delimiter
which is ,
.
To work around that you can use the following notation...
<TextBox Width="100" Height="100">
<TextBox.Text>
<Binding Path="MyIndexer[1,1]" />
</TextBox.Text>
</TextBox>
Or use the 'escaped' ,
with \
- which is also in that link (but somehow they're getting over fact that their original notation doesn't work).
<TextBox Text="{Binding MyIndexer[2\,2]}" Width="100" Height="100" />
Note that indexer, multi-dimentional array syntax is like this :)...
public string this[int x, int y]
{
get { return _items[x][y]; }
set { _items[x][y] = value; }
}
回答2:
Windows Phone is not a WPF, it is mostly Silverlight, and Silverlight does not support Indexer:
- Only one-dimensional array indexing is supported.
You can try to fix this by:
a) Try to implement something like Items[0][0]
, so Items[0]
will give you an array to which you again can apply indexer.
b) Try to implement this logic with IValueConverter
.
来源:https://stackoverflow.com/questions/15865289/binding-to-multiple-indexers