Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF C#获取选定行项目列表视图_C#_Wpf_Listview_Data Binding - Fatal编程技术网

WPF C#获取选定行项目列表视图

WPF C#获取选定行项目列表视图,c#,wpf,listview,data-binding,C#,Wpf,Listview,Data Binding,我有一个弹出列表视图,声明如下: <ListView x:Name="ShowFileLV" ItemsSource="{Binding EmployeeCollection}" DataContext="{Binding}" SelectedItem="{Binding Path=SelectedEmployee}" SelectionMode="Single"> <ListVie

我有一个弹出列表视图,声明如下:

<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>
直到我使用一个列表框(而不是ListView)加载了一个字符串列表,每个字符串都包含名称和ID,就像这样

<ListBox Name="ShowFileLV" 
         SelectionMode="Single" 
         SelectedValue="{Binding Path=Employee}" 
         Style="{StaticResource ListBoxStyle}" ItemsSource="{Binding Path=ListPopupItems}" >
</ListBox>
当我选择一行时,它会自动设置公共字符串Employee,而不需要代码。
如何使用ListView和Collections执行此操作?

SelectedItem绑定将值设置为集合EmployeeCollection中的类型。因此,假设EmployeeCollection是一个
可见集合
,则需要将所选员工从ListViewItem更改为Employee。另外,请确保您正在使用该界面

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");
    }
}

公共字符串SelectedEmployee
{
获取{return\u selectedEmployee;}
设置
{
_selectedEmployee=值;
RaiseProperty变更(“选定员工”);
}
}

谢谢您的回复。我没有使用INotifyPropertyChanged,实际上我不知道如何使用它。但我可以补充一点,当我运行代码时,我会在SelectedEmployee的set属性中将{MySolutionName.ViewModel.MainWindowViewModel.Employee}作为“值”。为什么我得到的是地址而不是行内容?您一定错过了SelectedValuePath。这应该是您想要的属性,例如Name或ID(如果ID是int,则将SelectedEmployee更改为int)。当集合是一组字符串时,它可以在没有SelectedValuePath的情况下工作,但当它是一个类时,需要告诉它要使用哪个属性。
public Employee SelectedEmployee
{
    get
    {
        return _selectedEmployee;
    }
    set
    {
        _selectedEmployee= value;
        RaisePropertyChanged("SelectedEmployee");
    }
}
<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");
    }
}