Привязка к массиву в Xamarin/XAML (реализация хлебных крошек)

Я пытаюсь реализовать навигацию по хлебным крошкам. У меня есть массив строк в коде С#, например:

    public static readonly BindableProperty CurrentPathProperty =
        BindableProperty.Create<FileBrowser, string[]>(c => c.CurrentPath, null);

    public string[] CurrentPath
    {
        get { return GetValue(CurrentPathProperty) as string[]; }
        set { SetValue(CurrentPathProperty, value); }
    }

Каким будет правильный способ привязки к свойству в XAML (отображать хлебные крошки и обновлять CurrentPath при нажатии на один из них)? Я пробовал гуглить ListViews и x:Array, но не вижу простого способа сделать это. Я знаю, что мне нужен обработчик событий PropertyChanged, но мне непонятно, что должно произойти на стороне XAML или как будет выглядеть обработчик.


person mayabelle    schedule 20.07.2015    source источник
comment
Можете ли вы предоставить XAML, который вы используете?   -  person Mark    schedule 21.07.2015
comment
Почему ваша собственность является BindableProperty? ваше свойство, скорее всего, является источником привязки, а не целью   -  person Stephane Delcroix    schedule 21.07.2015
comment
На самом деле мне нужно было, чтобы он обновлялся в двух направлениях — пользователь может перемещаться в элементе управления файловым браузером, который будет обновлять текущий путь, или они могут щелкнуть хлебные крошки в текущем пути, чтобы обновить элемент управления файлового браузера. В итоге я динамически вставлял метки из кода в макет стека, а затем подключал жест касания в обработчике события изменения свойства для обновления элемента управления файлового браузера.   -  person mayabelle    schedule 21.07.2015


Ответы (1)


Если вы хотите, чтобы ваш элемент управления обновлялся при добавлении элементов в ваш массив, вы должны использовать что-то, реализующее INotifyCollectionChanged, например ObservableCollection, вместо массива.

Имея это в качестве источника, вы можете связать его с ItemSource из ListView; ListView является единственным элементом управления Xamarin.Forms, который поддерживает DataTemplating из коробки.

Все более сложное требует определения вашего собственного контроля, наследования, например. из StackLayout или любого другого Layout и обрабатывать создание Label для каждой строки, добавленной в ваш массив.

person Stephane Delcroix    schedule 21.07.2015