如何从 2 ViewModel WPF 绑定数据

How to bind data from 2 ViewModel WPF

正如标题所说,我试图从 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; }
}

视图模型 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;
    }
}

当我运行程序时,它只显示空白。当我在没有容器和 select 1 ViewModel 的情况下更改它时,它仅显示图像,但我无法查看我的 ViewModel 2。是否有任何解决方案?

编辑:问题在我初始化 VM1 和 VM2 后解决,感谢 Loocid 回答。

您的 VMContainer 从未初始化 VModel1VModel2 因此您绑定到 null.

试试这个:

public class VMContainer
{
    public VModel1 VM1 { get; set; } = new VModel1();
    public VModel2 VM2 { get; set; } = new VModel2();
}