我正在开发一个WPF应用程序,我可以从Windows服务列表中读取当前正在我的系统上运行的一些属性。我能够读取特定服务的属性并传递给一个集合,该集合又会显示在我在Listview下的用户界面。
我希望将相同的场景用于服务列表。我正在尝试以下方式..但我不确定我在哪里错过了这一点......
这是我的代码
foreach (string serviceName in sList)
{
ServiceController controller = new ServiceController(serviceName);
StatusCollection.Add (new StatusData
{
Name = name,
Status = status
});
lvStatus.DataContext = StatusCollection;
lvStatus.ItemsSource = StatusCollection;
}
<ListView Height="166" HorizontalAlignment="Left" Margin="23,0,0,0" Name="lvStatus" VerticalAlignment="Top" Width="264" >
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"></GridViewColumn>
<GridViewColumn Header="Status" DisplayMemberBinding="{Binding Status}"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>
答案 0 :(得分:1)
删除DataContext代码行。
如果在后面的代码中设置ItemsSource,请确保在调用InitializeComponent之前执行此操作。如果没有,您将需要刷新Items集合。
但是,我会为您的Window或Control设置一个View Model,它实现了INotifyPropertyChanged。将您的集合创建为ObservableCollection并在XAML中绑定它:
<ListView ... ItemsSource={Binding Path=ServiceList}>
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Path=Name}" />
<GridViewColumn Header="Status" DisplayMemberBinding="{Binding Path=Status}" />
</GridView>
</ListView.View>
</ListView>
如果您需要使用视图模型的示例,请告诉我。