WPF Listview获取行值

WPF Listview获取行值,wpf,listview,Wpf,Listview,我有如下XAML文件: <Window x:Class="ComboBoxCheck.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:check="clr-namespace:ComboBoxCheck" Title="Window1" Height="300" Wid

我有如下XAML文件:

<Window x:Class="ComboBoxCheck.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:check="clr-namespace:ComboBoxCheck"
Title="Window1" Height="300" Width="320">
<Window.Resources>
    <ObjectDataProvider x:Name="Designation" MethodName="GetDesignations" ObjectType="{x:Type check:Window1}" x:Key="Designation" IsAsynchronous="True"/>
</Window.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="30"/>
    </Grid.RowDefinitions>
    <ListView Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Name="lsvStaffList"  Margin="0,0,0,3"
          BorderBrush="Transparent" BorderThickness="0">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Employee Id" Width="70" DisplayMemberBinding="{Binding Path=EmployeeId}"/>
                <GridViewColumn Header="Employee Name" Width="90" DisplayMemberBinding="{Binding Path=EmployeeName}"/>
                <GridViewColumn Header="Designation" Width="120">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox Name="cmbDesignation" Height="20" Width="90" SelectedValue="{Binding Path=EmployeeDesignation}"
                                      ItemsSource="{Binding Source={StaticResource Designation}}"
                                      DisplayMemberPath="Name" SelectedValuePath="Id"
                                      VerticalAlignment="Top" HorizontalAlignment="Stretch"/>        
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>                    
            </GridView>
        </ListView.View>
    </ListView>
    <Button Name="btnProperty" Width="75" Content="Get Value" Height="25" Click="btnProperty_Click" Grid.Row="1"/>
</Grid>

代码隐藏文件如下所示:

<Window x:Class="ComboBoxCheck.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:check="clr-namespace:ComboBoxCheck"
Title="Window1" Height="300" Width="320">
<Window.Resources>
    <ObjectDataProvider x:Name="Designation" MethodName="GetDesignations" ObjectType="{x:Type check:Window1}" x:Key="Designation" IsAsynchronous="True"/>
</Window.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="30"/>
    </Grid.RowDefinitions>
    <ListView Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Name="lsvStaffList"  Margin="0,0,0,3"
          BorderBrush="Transparent" BorderThickness="0">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Employee Id" Width="70" DisplayMemberBinding="{Binding Path=EmployeeId}"/>
                <GridViewColumn Header="Employee Name" Width="90" DisplayMemberBinding="{Binding Path=EmployeeName}"/>
                <GridViewColumn Header="Designation" Width="120">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox Name="cmbDesignation" Height="20" Width="90" SelectedValue="{Binding Path=EmployeeDesignation}"
                                      ItemsSource="{Binding Source={StaticResource Designation}}"
                                      DisplayMemberPath="Name" SelectedValuePath="Id"
                                      VerticalAlignment="Top" HorizontalAlignment="Stretch"/>        
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>                    
            </GridView>
        </ListView.View>
    </ListView>
    <Button Name="btnProperty" Width="75" Content="Get Value" Height="25" Click="btnProperty_Click" Grid.Row="1"/>
</Grid>
使用制度; 使用System.Collections.Generic; 使用System.Linq; 使用系统文本; 使用System.Windows; 使用System.Windows.Controls; 使用System.Windows.Data; 使用System.Windows.Documents; 使用System.Windows.Input; 使用System.Windows.Media; 使用System.Windows.Media.Imaging; 使用System.Windows.Navigation; 使用System.Windows.Shapes

名称空间组合框检查 {

公共部分类窗口1:窗口
{
公共静态名称名称=空;
公共雇员=空;
公共窗口1()
{
初始化组件();
名称=新名称();
雇员=新雇员();
名称d1=新名称();
d1.Id=1;
d1.Name=“经理”;
名称。添加(d1);
名称d2=新名称();
d2.Id=2;
d2.Name=“开发商”;
名称。添加(d2);
名称d3=新名称();
d3.Id=3;
d3.Name=“铅”;
名称。添加(d3);
员工e1=新员工();
e1.EmployeeId=1;
e1.EmployeeName=“名称1”;
e1.EmployeeDesignation=2;
增加(e1);
员工e2=新员工();
e2.EmployeeId=2;
e2.EmployeeName=“名称2”;
e2.EmployeeDesignation=2;
增加(e2);
员工e3=新员工();
e3.EmployeeId=3;
e3.EmployeeName=“Name3”;
e3.EmployeeDesignation=1;
添加(e3);
lsvStaffList.ItemsSource=员工;
}
公共静态指定GetDesignations()
{
返回指定;
}
私有无效btnProperty\u单击(对象发送方,路由目标)
{
//我需要这样的东西
//employeesCollection=新员工();
//employeesCollection[0]。EmployeeId=1
//employeesCollection[0]。EmployeeName=Name1
//employeesCollection[0]。EmployeeDesignation=Developer
//employeesCollection[1]。EmployeeId=2
//employeesCollection[1]。EmployeeName=Name2
//employeesCollection[1]。EmployeeDesignation=Developer
//employeesCollection[2]。EmployeeId=3
//employeesCollection[2]。EmployeeName=Name3
//employeesCollection[2]。EmployeeDesignation=Manager
}
}
公共类名称:列表{}
公共班级名称
{
私有int-id;
公共整数Id
{
获取{return id;}
设置{id=value;}
}
私有字符串名称;
公共字符串名
{
获取{返回名称;}
设置{name=value;}
}
}
公共类员工:列表{}
公营雇员
{
私人国际雇员ID;
公共国际雇员ID
{
获取{return employeeid;}
设置{employeeid=value;}
}
私有字符串employeename;
公共字符串EmployeeName
{
获取{return employeename;}
设置{employeename=value;}
}
私人国际雇员签名;
公共内部员工签名
{
获取{return employeedesignation;}
设置{employeedesignation=value;}
}
}    
}


我想获取包含员工姓名、员工id和员工名称的员工集合。我需要在“获取值”按钮的单击事件中输入一个代码,并给出格式。

您的绑定工作正常。只需按如下方式获取ListView的Items集合:

private void btnProperty_Click(object sender, RoutedEventArgs e)
{
    IEnumerable items = this.lsvStaffList.Items;
    foreach (Employee employee in items)
    {
        Console.WriteLine(employee.EmployeeId.ToString() 
            + "," + employee.EmployeeName.ToString() 
            + "," + employee.EmployeeDesignation.ToString());
    }
}
private void btnProperty_Click(object sender, RoutedEventArgs e)
{
    IEnumerable items = this.lsvStaffList.Items;
    foreach (Employee employee in items)
    {
        Designation d = designations.First(p => p.Id == employee.EmployeeDesignation);

        Console.WriteLine(employee.EmployeeId.ToString() 
            + "," + employee.EmployeeName.ToString() 
            + "," + d.Name);
    }
}
但是,此处的EmployeeDesignation是一个int。如果要获取实际的EmployeeDesignation实例,可以手动“查询”它,如下所示:

private void btnProperty_Click(object sender, RoutedEventArgs e)
{
    IEnumerable items = this.lsvStaffList.Items;
    foreach (Employee employee in items)
    {
        Console.WriteLine(employee.EmployeeId.ToString() 
            + "," + employee.EmployeeName.ToString() 
            + "," + employee.EmployeeDesignation.ToString());
    }
}
private void btnProperty_Click(object sender, RoutedEventArgs e)
{
    IEnumerable items = this.lsvStaffList.Items;
    foreach (Employee employee in items)
    {
        Designation d = designations.First(p => p.Id == employee.EmployeeDesignation);

        Console.WriteLine(employee.EmployeeId.ToString() 
            + "," + employee.EmployeeName.ToString() 
            + "," + d.Name);
    }
}

那太好了。这个解决方案非常有效!这就是我要找的。谢谢你,克鲁米先生!!