【发布时间】:2014-02-09 10:21:14
【问题描述】:
无法让我的列表视图显示数据。
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 显示在我的数据网格中,因此这表明数据上下文正在按预期工作。
现在我对 ObservableCollection 的印象是我不需要 INotifyPropertyChange,如果这是错误的,请告知。
我也尝试过 ItemsSource="{Binding ComputersList}"
我已经在代码中放了一个断点,以确保可观察的集合有数据,并且它在那里。
- ComputersList 计数 = 2 System.Collections.ObjectModel.ObservableCollection
- [0] {AdminUltimate.Model.NetworkModel.ComputerNode} 对象 {AdminUltimate.Model.NetworkModel.ComputerNode} ComputerName "ASUS-PC" 字符串
有人可以帮忙吗? 谢谢你
【问题讨论】:
-
展示错误。 ObservableCollection 实现 INotifyCollectionChanged(不是 INotifyPropertyChanged)。 OC 通知插入和删除 - 不是对现有项目的更改。
-
尝试将
ComputersList属性声明为ObservableCollection<ComputerNode>而不是ObservableCollection<Object> -
同意har07。 NotifyPropertyChanged("计算机列表");不属于那里。 ComputerNode 需要一个 NotifyPropertyChanged("ComputerName");
-
@Blam -
ObservableCollection实现了INPC和INCC。但是,您的另一个断言是正确的,基础对象中的任何属性更改都不会在 GUI 上刷新,因为该对象应实现INPC。 -
@RohitVats 我的立场是正确的