我正在尝试以编程方式将项添加到WPF中的ListView。我已经做了很多阅读(包括这里的一些问题),并认为我正确地做了但项目没有出现。据我了解,我创建ListViewe并将其绑定到数据源,在本例中为ObservableCollection。我已经验证了ObservableCollection正在添加项目,但它们没有显示在ListView上。如果重要,ListView已经在我运行LINQ查询时实例化,并尝试向其添加项目。
以下是定义列表视图的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);
}
}
答案 0 :(得分:3)
您发布的代码存在以下几个问题:
ItemsSource
的绑定语法缺少{}大括号 - 它必须是ItemsSource="{Binding FCPortCollection}"
PortResult
类中的字段。将这些字段更改为属性。还要确保ListView
的DataContext设置为包含FCPortCollection
的对象。还要确保集合是对象的属性而不是字段(与上面第2点相同的原因)。
答案 1 :(得分:2)
此:
ItemsSource="Binding FCPortCollection"
不是绑定,您忘记了大括号{}
,因此将char[]
改为ItemsSource
。