【问题标题】:How to bind data from 2 ViewModel WPF如何从 2 ViewModel WPF 绑定数据
【发布时间】:2019-04-27 18:25:24
【问题描述】:

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

视图模型 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。有什么解决方案吗?

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

【问题讨论】:

    标签: c# wpf xaml data-binding viewmodel


    【解决方案1】:

    您的VMContainer 永远不会初始化VModel1VModel2,因此您绑定到null

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 2011-05-05
      • 2011-03-22
      • 1970-01-01
      相关资源
      最近更新 更多