如何在WPF中获取ListView的项目?

时间:2011-07-26 12:48:24

标签: c# wpf listview

在WPF中,如何访问ListView的项目?

我知道SelectedValuePath="...",但在我的ListView中它显示7列。 例如,GridViewColumn包含房间号,我想将所有房间号行放在列表中,并为所有列进行此操作。

2 个答案:

答案 0 :(得分:2)

列表视图的单元格由对象列表生成,其中每列都有几个绑定。

你要求的不是WPF方式,而是旧式方法(例如winforms)。 WPF完全不同,访问单元格很麻烦(我添加的也不可靠)。

了解已选择的对象后,只需访问绑定了各列的属性即可。

答案 1 :(得分:0)

WPF处理数据源的方式与WinForms不同。起初,它似乎在WPF中更复杂,因为您无法像在WinForms中那样访问源集合。但是,您很快就会发现WPF使得开发更自然。

在WPF中,您希望 UI控件(例如ListView)绑定到数据源。数据源只是您希望它的任何自定义类型的代码隐藏中的集合。只要您授予对集合的适当访问权限,您的任何代码隐藏都可以访问源数据,而无需与ListView通信。

对于列表视图,数据源将是DataContext上的ObservableCollection,您的视图将连接到该DataContext。类型 T 是自定义类类型。通过XAML代码,您可以在ListView上定义一个数据模板,该模板描述了如何为每个数据项显示自定义类类型的属性。

要了解更多信息,请研究MVVM UI模式并研究INotifyPropertyChanged接口。

例如:

代码背后

internal class MyViewModel
{
    public ObservableCollection<Person> People = new ObservableCollection<People>();

    // code to populate People
}

public class MyWindow
{
    public MyWindow()
    {
        DataContext = new MyViewModel();
    }
}

查看

<ListView ItemsSource={Binding Path=People, Mode=OneWay}>
    <ListView.DataTemplate>
        <Label Content={Binding Path=FirstName, Mode=OneWay} />
        <!-- Blah blah blah -->
    </ListView.DataTemplate>
</ListView>

This MSDN文章详细介绍(请参阅底部的代码片段和示例)。