【发布时间】: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