ListView Observable Collection不会显示成员

时间:2014-02-08 14:03:25

标签: c# wpf listview

无法让我的listview显示数据。

XAML

<Grid>
    <DockPanel>
        <ListView Name="lstDetectedComputers" 
                  MinWidth="200" 
                  DockPanel.Dock="Left" 
                  ItemsSource="{Binding ComputersList}" DisplayMemberPath="ComputerName">
        </ListView>
        <DataGrid x:Name="ViewNetworkCardInformation" 
                  ItemsSource="{Binding NetworkCardInformation}"/>
    </DockPanel>
</Grid>

代码:

private ObservableCollection<Object> _ComputersList;
public ObservableCollection<Object> ComputersList
{
    get 
    { 
        return _ComputersList;
    }

    set 
    {
        _ComputersList = value; NotifyPropertyChanged("ComputersList");
    }
}

private DataTable _NetworkCardInformation;
public DataTable NetworkCardInformation
{
    get 
    { 
        return _NetworkCardInformation; 
    }

    set 
    { 
        _NetworkCardInformation = value; NotifyPropertyChanged("NetworkCardInformation"); 
    }
}

奇怪的是,NetworkCardInformation在我的数据网格中显示,因此这表明datacontext正在按预期工作。

现在我在ObservableCollection的印象下我不需要INotifyPropertyChange,如果这是错误的,请建议。

我也试过了ItemsSource =“{Binding ComputersList}”

我在代码中设置了一个断点,以确保可观察集合具有数据,并且它就在那里。

  • ComputersList Count = 2 System.Collections.ObjectModel.ObservableCollection
  • [0] {AdminUltimate.Model.NetworkModel.ComputerNode} object {AdminUltimate.Model.NetworkModel.ComputerNode}     ComputerName“ASUS-PC”字符串

有人可以帮忙吗? 谢谢

1 个答案:

答案 0 :(得分:1)

您已将DisplayMemberPath设为ComputerName,但Object没有任何此类属性,因此在视图中不会显示任何内容。

这可以通过删除DisplayMemberPath来验证,如果在ListBox上没有设置ItemTemplate和DisplayMemberPath,则会在对象上调用ToString(),因此您将看到对象的完全限定类名。

因此,解决方案是ObservableCollection<Object>更改为包含属性ComputerName的更具体对象的类型,即ObservableCollection<ComputerNode>