Как связать данные из 2 ViewModel WPF - PullRequest
0 голосов
/ 26 ноября 2018

Как сказано в названии, я пытался получить данные от 2 разных ViewModel, но на нем ничего не отображается.Я делаю это неправильно?
Вот мой XAML

<Window.DataContext>
    <local:VMContainer/>
</Window.DataContext>
<Grid>
    <StackPanel Orientation="Horizontal">
        <ItemsControl ItemsSource="{Binding Path=VM1.LibraryVM1}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Image Width="150" Height="200" Source="{Binding Path=cover}" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
        <ItemsControl ItemsSource="{Binding Path=VM2.LibraryVM2}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Image Width="150" Height="200" Source="{Binding Path=cover}" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </StackPanel>
</Grid>

Мой контейнер

public class VMContainer
{
    public VModel1 VM1 { get; set; }
    public VModel2 VM2 { get; set; }
}

ViewModel 1

public class VModel1
{
    public DataView LibraryVM1 { get; private set; }
    public VModel1()
    {
        DataTable vm1 = new DataTable();
        using (MySqlConnection connection = new MySqlConnection("SERVER=localhost;" + "DATABASE=library;" + "UID=root;" + "PASSWORD=;"))
        {
            MySqlDataAdapter adapter = new MySqlDataAdapter();
            adapter.SelectCommand = new MySqlCommand("Select * from index_movie_list", connection);
            adapter.Fill(vm1);
        }
        LibraryVM1 = vm1.DefaultView;
    }
}

ViewModel 2

public class VModel2
{
    public DataView LibraryVM2 { get; private set; }
    public VModel2()
    {
        DataTable vm2 = new DataTable();
        using (MySqlConnection connection = new MySqlConnection("SERVER=localhost;" + "DATABASE=library;" + "UID=root;" + "PASSWORD=;"))
        {
            MySqlDataAdapter adapter = new MySqlDataAdapter();
            adapter.SelectCommand = new MySqlCommand("Select * from index_tv_list", connection);
            adapter.Fill(vm2);
        }
        LibraryVM2 = vm2.DefaultView;
    }
}

когда я запускаю программу, она показывает только пустой белый цвет.Когда я изменяю его без контейнера и выбираю 1, только ViewModel показывает изображение, но я не могу просмотреть свою ViewModel 2. Есть ли какие-то решения для этого?

Редактировать: Проблема решена после инициализации VM1 и VM2 благодаря ответу Loocid.

1 Ответ

0 голосов
/ 26 ноября 2018

Ваш VMContainer никогда не инициализирует VModel1 и VModel2, поэтому вы привязываетесь к null.

Попробуйте:

public class VMContainer
{
    public VModel1 VM1 { get; set; } = new VModel1();
    public VModel2 VM2 { get; set; } = new VModel2();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...