我有一个弹出的ListView,以这种方式声明:WPF C#获取选中行项目列表视图
<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;
}
}
这是工作,直到我用装载有字符串,同时含有名称和ID的每个字符串的列表的列表框(而不是ListView中),像这样的
<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?
谢谢你的回复李。我没有使用INotifyPropertyChanged,实际上我不知道如何使用它。但是我可以补充一点,当我运行代码时,我在SelectedEmployee的set属性中将{MySolutionName.ViewModel.MainWindowViewModel.Employee}作为“值”。为什么我会得到一个地址而不是行内容? – Parni 2014-08-27 15:36:31
您一定错过了SelectedValuePath。这应该是您想要的属性,例如Name或ID(如果ID是int,则将SelectedEmployee更改为int)。它的工作方式没有SelectedValuePath,当你收集的是一串字符串,但是当它是一个类时,你需要告诉它使用哪个属性。 – 2014-08-27 15:56:40
非常感谢李。它解决了 – Parni 2014-08-28 06:39:27