无法将集合绑定到WPF应用程序中的Listview?

时间:2011-11-15 19:33:14

标签: c# wpf

我正在开发一个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>

1 个答案:

答案 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>

如果您需要使用视图模型的示例,请告诉我。