Связывание данных нескольких классов с единым списком / формами xamarin - PullRequest
0 голосов
/ 31 мая 2018

Здравствуйте, как я могу связать данные нескольких классов с одним представлением списка через xaml.Я успешно связал данные из одного класса с lisview, но когда я пытаюсь связать данные более чем одного класса, он ничего не показывает в xaml.

1 Ответ

0 голосов
/ 31 мая 2018

Вы не можете сделать это «напрямую».Поскольку все элементы управления UIElement имеют только одно свойство BindingContext, вы можете связывать только один объект за раз.

В шаблонах MVVM реализованы классы ViewModel для группировки всех необходимых данных для отображения на связанной странице....

Поэтому для вашего 'Listview' я предлагаю вам создать свойство в вашей ViewModel, которое ссылается на новый объект, который является просто агрегацией всехклассы, которые вы хотите подключить к списку.

Простой пример:

/// Data A needed for your listview 
public class DataA { ... }

/// Data B needed for your listview 
public class DataB { ... }

///
/// You will make a property of this type into your viewModel
///
public class ListviewAggregatedData : INotifyPropertyChanged
{
    private DataA _listviewDataPart1;
    private DataB _listviewDataPart2;

    public DataA ListViewDataPart1
    {
        get => _listviewDataPart1;
        set {  _listviewDataPart1 = value; PropertyChanged?.Invoke(...); }
    }

    public DataA ListViewDataPart2
    {
        get => _listviewDataPart2;
        set {  _listviewDataPart2 = value; PropertyChanged?.Invoke(...); }
    }

    // ....
}

и в вашем xaml , предполагая, что ваш viewModel реализует свойство типа ListviewAggregatedDataназывается 'VmAggregatedDataProp', у вас может быть что-то вроде этого:

        <ListView
            BindingContext="{Binding VmAggregatedDataProp}"
            Header="{Binding ListViewDataPart1.Title}"
            ItemsSource="{Binding ListViewDataPart2.AllMyItems}"
            />

В этом примере имена привязок должны быть заменены вашими собственными свойствами ... Скажите, если все ясно ...

...