Как связать несколько моделей представления для одного представления - PullRequest
0 голосов
/ 09 января 2020

У меня есть два списка просмотра на одной странице контента, поэтому я бы хотел, чтобы каждый просмотр списка имел свою собственную модель представления как itemsoruce.

Ответы [ 2 ]

1 голос
/ 09 января 2020

Добавление отдельного ItemsSource для ListView проще. Если это то, что вы ищете. Это можно сделать с двумя свойствами в вашей MainViewModel.

XAMl

<ListView
        ItemsSource="{Binding ListSource1}">
    </ListView>
    <ListView
        Grid.Column="1"
        ItemsSource="{Binding ListSource2}">
    </ListView>

Класс ViewModel

public class MainViewModel
{
    public ObservableCollection<string> ListSource1 { get; set; }
    public ObservableCollection<string> ListSource2 { get; set; }

    public MainViewModel()
    {
        ListSource1 = new ObservableCollection<string>()
        {
            "I'm from first viewmodel",
            "I'm from first viewmodel",
            "I'm from first viewmodel",
            "I'm from first viewmodel",
            "I'm from first viewmodel",
            "I'm from first viewmodel"
        };

        ListSource2 = new ObservableCollection<string>()
        {
            "I'm from second ViewModel",
            "I'm from second ViewModel",
            "I'm from second ViewModel",
            "I'm from second ViewModel",
            "I'm from second ViewModel",
            "I'm from second ViewModel"
        };
    }
}

Если вы хотите добавить источник из разных ViewModels.

ListSource1 = new ViewModel1().ListSource;
ListSource2 = new ViewModel2().ListSource;

Если вы хотите sh установить BindingContext для ListView, это можно сделать, связав сам контекст привязки, как предлагает Марко.

Но вам нужно также добавить ViewModel к вашей основной ViewModel в качестве свойств.

public ViewModel1 FirstViewModel { get; set; }
public ViewModel2 SecondViewModel { get; set; }

Xaml:

<ListView
     BindingContext="{Binding FirstViewModel}"
1 голос
/ 09 января 2020

Просто установите свой BindingContext для своего ListView.

В Xaml:

<ListView x:Name="list1">
</ListView>

<ListView x:Name="list2">
</ListView>

А в коде сзади просто привязайте его:

list1.BindingContext = ViewModel1;
list2.BindingContext = ViewModel2;

Если вы sh, чтобы связать его в коде, вы также можете использовать BindingContext-Property в XAML:

<ListView ItemSource="{Binding itemList1}" BindingContext="{Binding ViewModel1}" />

<ListView ItemSource="{Binding itemList2}" BindingContext="{Binding ViewModel2}" />

Но имейте в виду, что вам нужна «глобальная» модель связывания (или MasterViewModel), которая сохраняет Вложенные модели просмотра как дочерние свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...