这是我的 ListView :
<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 创建对象
最佳答案
ItemTemplate 中的绑定(bind)使用数据项类的属性作为其源属性。因此你应该写
Text="{Binding Name}"
代替
Text="{Binding ModuleName}"
除非你设置
View
ListView 的属性(例如 GridView
)您还可以更好地使用 ListBox,它是 ListView 的基类,并且更简单:<ListBox ItemsSource="{Binding ModuleList}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding ModuleImage}"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
初始化
ModuleList
View 模型构造函数中的属性就像这样简单:public ItemListViewVM()
{
modulLoader.LoadAllModules();
ModuleList = modulLoader.GetAllModules();
}
关于c# - TextBlock 未显示在 ListView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58851327/