Связывание с несколькими индексаторами

Я пытаюсь связать индексированное свойство с двумя индексаторами. Свойство выглядит так

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,

Другие вопросы по тегам