WPF C#获取所选行项目Listview



我有一个弹出的ListView,以这种方式声明:

<ListView x:Name="ShowFileLV" 
          ItemsSource="{Binding EmployeeCollection}" 
          DataContext="{Binding}" 
          SelectedItem="{Binding Path=SelectedEmployee}" 
          SelectionMode="Single">
    <ListView.View>
        <GridView>
            <GridViewColumn Width="140" 
                            DisplayMemberBinding="{Binding Name}">
                <GridViewColumnHeader Click="SortClick"   
                                      Tag="Name" 
                                      Content="Name" />
            </GridViewColumn>
            <GridViewColumn Width="140" 
                            DisplayMemberBinding="{Binding ID}">
                <GridViewColumnHeader Click="SortClick"
                                      Tag="ID" 
                                      Content="ID" />
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

列表和排序都很好。我的问题是,我想在选择一行时直接更新SelectedEmployee(不确定ListViewItem是否是正确的选择),或者更好的是,只获取ID或名称:

public ListViewItem SelectedEmployee
{
    get
    {
        return _selectedEmployee;
    }
    set
    {
        _selectedEmployee= value;           
    }
}

这一直有效,直到我使用了一个加载了字符串列表的ListBox(而不是ListView),每个字符串都包含Name和ID,就像这个一样

<ListBox Name="ShowFileLV" 
         SelectionMode="Single" 
         SelectedValue="{Binding Path=Employee}" 
         Style="{StaticResource ListBoxStyle}" ItemsSource="{Binding Path=ListPopupItems}" >
</ListBox>

使用公共字符串,如:

public String Employee
{
    get
    {
        return _employee;
    }
    set
    {
        _employee= value;
        OnPropertyChanged("Employee");
    }
}

当我选择一行时,它会自动设置公共字符串Employee,而不需要代码。我如何使用ListView和Collections完成他的操作?

SelectedItem绑定将值设置为集合EmployeeCollection中的类型。因此,假设EmployeeCollection是ObservableCollection<Employee>,您需要将SelectedEmployee从ListViewItem更改为Employees。此外,请确保您使用的是INotifyPropertyChanged接口。
public Employee SelectedEmployee
{
    get
    {
        return _selectedEmployee;
    }
    set
    {
        _selectedEmployee= value;
        RaisePropertyChanged("SelectedEmployee");
    }
}

如果只需要名称或ID,请使用SelectedValue和SelectedValuePath而不是SelectedItem。

<ListView x:Name="ShowFileLV" 
          ItemsSource="{Binding EmployeeCollection}" 
          DataContext="{Binding}" 
          SelectedValue="{Binding Path=SelectedEmployee}"
          SelectedValuePath="Name"
          SelectionMode="Single"> 
public string SelectedEmployee
{
    get { return _selectedEmployee; }
    set
    {
       _selectedEmployee = value;
       RaisePropertyChanged("SelectedEmployee");
    }
}

最新更新