【发布时间】:2014-07-08 15:11:54
【问题描述】:
如何:使用 C# 而不是 XAML 填充 ListView
我想使用 C# (WPF) 填充 ListView,而不是使用 XAML。原因是我们不知道运行前的元素数量。
这是我的工作 XAML 代码:
<ListView Name="listView_BusinessContacts" SelectionMode="Single">
<ListViewItem Selected="ListViewItem_Selected">
<DockPanel DockPanel.Dock="Top" Name="dockPanel_1">
<Image DockPanel.Dock="Left" Source="/X;component/Images/folder.png" Stretch="None" />
<Label Content="Test 123" DockPanel.Dock="Right" Name="label_1" />
</DockPanel>
</ListViewItem>
</ListView>
我的想法是首先创建ListViewItem。之后,我可以创建DockPanel。但是现在,我不知道如何将两个元素添加到DockPanel(这里:Image 和Label)。之后,我会将DockPanel 添加到ListViewItem,然后将ListViewItem 添加到ListView。
我希望你明白我想做什么。
SynerCoder 的解决方案:
public void SetListViewItems()
{
foreach (var item in File.ReadAllLines(@"C:\Companies\Companies.txt", Encoding.UTF8))
{
Image image = new Image();
image.Source = new BitmapImage(new Uri(@"Images\folder.png", UriKind.Relative));
image.Stretch = Stretch.None;
Label label = new Label();
label.Content = "Test 123";
DockPanel.SetDock(image, Dock.Left);
DockPanel.SetDock(label, Dock.Right);
DockPanel dockPanel = new DockPanel();
dockPanel.Children.Add(image);
dockPanel.Children.Add(label);
ListViewItem listViewItem = new ListViewItem();
listViewItem.Content = dockPanel;
listView_BusinessContacts.Items.Add(listViewItem);
}
}
【问题讨论】:
-
正确的方法是将 DataTemplate 分配给 ListView 的
ItemTemplate属性,并将ItemsSource属性绑定到数据项的集合。请参阅 MSDN 上的 Data Templating Overview 文章。标准的 WPF 书籍也详细解释了这一点。 -
如果您将
ListView的ItemsSource绑定到视图模型中的集合,则无需知道ListView中的元素数量。您只需要定义该列表中的项目如何在视觉上表示的模板,然后可以进一步将项目的属性绑定到 UI 元素的属性。 -
谢谢,Clemens 和 Mashton。
-
@Exception 你真的不应该那样做。 WPF 提供极其强大的数据模板,这将大大简化并因此改进您的应用程序。阅读我在之前评论中链接的文章。
标签: c# xaml listview add dockpanel