【发布时间】:2019-11-14 17:43:59
【问题描述】:
这是我的列表视图:
<ListView ItemsSource="{Binding ModuleList}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<!--<Image Source="{Binding ModuleImage}" Stretch="UniformToFill"/>-->
<TextBlock Text="{Binding ModuleName}"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这是 WPF (MVVM) 中的代码:
public ItemListViewVM() : base()
{
ModuleList = new List<Module>();
modulLoader.LoadAllModules();
tempModulList = modulLoader.GetAllModules();
foreach (var module in tempModulList)
{
ModuleImage = module.ModuleImage;
ModuleName = module.Name;
ModuleList.Add(module);
}
}
长话短说:列表tempModulList 包含Module 类型的对象,它有一个ImageSource Image 和一个字符串Name。然后 ModuleList 得到一个接一个的项目。当我在 xaml 中取消注释图像时,您可以看到它。但是 TextBlock 无论如何都不会出现。我检查了每个项目的字符串module.Name,它不为空。
编辑:添加模块类 模块类只包含名称和图像:
public class Module
{
public ImageSource ModuleImage { get; set; }
public string Name { get; set; }
}
对象是通过反序列化 Json 来创建的
【问题讨论】:
-
Control的DataContext设置是否正确?
-
是这个:
<Grid.DataContext> <vm:ItemListViewVM/> </Grid.DataContext> -
您当然也应该显示 Module 类的声明。除此之外,ItemListViewVM 构造函数中的 foreach 循环似乎毫无意义。 ModuleImage 和 ModuleName 属性或字段的用途是什么?你为什么不直接拥有
ModuleList = modulLoader.GetAllModules();? -
因为我希望
ModuleImage和ModuleName显示在列表中。如果我只是做ModuleList = modulLoader.GetAllModules();它什么也没显示,因为ModuleImage和ModuleName都没有设置 -
当然,这是
Module中的两个属性。循环内的属性或变量是什么? IE。ModuleImage = module.ModuleImage;和ModuleName = module.Name;?