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