【发布时间】:2012-02-21 17:37:55
【问题描述】:
我正在尝试以编程方式将项目添加到 WPF 中的 ListView。我做了很多阅读(包括这里的一些问题)并认为我做对了,但这些项目没有出现。据我了解,我创建了 ListViewe 并将其绑定到数据源,在本例中为 ObservableCollection。我已经验证 ObservableCollection 正在向其中添加项目,但它们没有显示在 ListView 上。如果重要的话,在我运行 LINQ 查询并尝试向其中添加项目时,ListView 已经实例化了。
这是定义列表视图的 XAML:
<TabPanel Name="ResultsTab" Height="200" Width ="500" DockPanel.Dock="Top" HorizontalAlignment="Left">
<TabItem Name="Default_Tab" Header="Default">
<ListView Name="DefaultListView" ItemsSource="Binding FCPortCollection">
<ListView.View>
<GridView x:Name="DefaultGridView">
<GridViewColumn Width="Auto" Header="FC Port" DisplayMemberBinding="{Binding Path=FCPort}" />
<GridViewColumn Width="Auto" Header="WWPN" DisplayMemberBinding="{Binding Path=WWPN}"/>
<GridViewColumn Width="Auto" Header="FCID" DisplayMemberBinding="{Binding Path=FCID}" />
<GridViewColumn Width="Auto" Header="SwitchName" DisplayMemberBinding="{Binding Path=SwitchName}">
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</TabItem>
这是应该加载它的代码。
public class PortResult
{
public string SwitchName;
public string FCPort;
public string FCID;
public string WWPN;
public PortResult(string name, FCPort port)
{
SwitchName = name;
FCPort = String.Format("fc{0}/{1}", port.SlotNum, port.PortNum);
WWPN = port.WWPNList[0].WWPNValue;
FCID = port.WWPNList[0].FCIDValue;
}
}
ObservableCollection<PortResult> FCPortCollection = new ObservableCollection<PortResult>();
// results is an IEnumerable collection of FCPort result from a LINQ query that has been turned into a Dictionary
foreach (KeyValuePair<string, List<FCPort>> resultspair in results)
{
foreach (FCPort port in resultspair.Value)
{
// create a new PortResult and add it to the ObservableCollection
PortResult pr = new PortResult(resultspair.Key, port);
FCPortCollection.Add(pr);
}
}
【问题讨论】:
-
我现在做。 :) 这很有帮助。谢谢。
-
不客气,这些基础知识很重要 :)
标签: c# wpf xaml listview data-binding