Связывание с несколькими индексаторами
Я пытаюсь связать индексированное свойство с двумя индексаторами. Свойство выглядит так
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 ответа
Проблема заключается в {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; }
}
Windows Phone не является WPF, в основном это Silverlight, и Silverlight не поддерживает индексатор:
- Поддерживается только одномерное индексирование массива.
Вы можете попытаться это исправить:
а) Попробуйте реализовать что-то вроде Items[0][0]
, так Items[0]
даст вам массив, к которому вы снова можете применить индексатор.
б) Попробуйте реализовать эту логику с IValueConverter
,