【发布时间】:2019-05-04 17:05:49
【问题描述】:
我对多选和 SelectedItem 属性有一点问题。我的应用程序以下列方式工作:当我单击 Listview 中的一条记录时,该记录中的数据将显示在文本框中。现在这是我的问题。我想实现如下功能:当我一个接一个地单击记录时,我想显示最后一个选定项目的数据。不幸的是 SelectedItem 仅适用于第一个元素。你可以帮帮我吗?我附上了必要的代码部分:
MainWindow.xaml
<ListView Name="EmployeeListView" HorizontalAlignment="Left" Height="160" Margin="0,153,0,0" VerticalAlignment="Top" Width="755" Grid.Row="1" ItemsSource="{Binding FilteredCollection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding SelectedEmployee, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedIndex="{Binding SelectedIndex}" IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView>
<GridViewColumn Header="EmployeeName" Width="150" DisplayMemberBinding="{Binding EmployeeName}" />
<GridViewColumn Header="EmployeeID" Width="150" DisplayMemberBinding="{Binding EmployeeID}" />
<GridViewColumn Header="EmployeeSalary" Width="150" DisplayMemberBinding="{Binding EmployeeSalary}" />
<GridViewColumn Header="EmployeeDesigner" Width="150" DisplayMemberBinding="{Binding EmployeeDesigner}" />
<GridViewColumn Header="EmployeeEmailID" Width="150" DisplayMemberBinding="{Binding EmployeeEmailID}" />
</GridView>
</ListView.View>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected, UpdateSourceTrigger=PropertyChanged}"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
Employee.cs
public IEnumerable<Employee> SelectedEmployees
{
get
{
selectedEmployees = Employees.Where(o => o.IsSelected).ToList();
return selectedEmployees;
}
set
{
selectedEmployees = value;
OnPropertyChanged("SelectedEmployees");
}
}
public bool IsSelected
{
get
{
//Application.Current.Dispatcher.BeginInvoke(new Action(() => MessageBox.Show("SELE")));
return isSelected;
}
set
{
isSelected = value;
OnPropertyChanged("IsSelected");
}
}
public ObservableCollection<Employee> Employees
{
get
{
return employees;
}
set
{
employees = value;
OnPropertyChanged("Employees");
}
}
public ICollectionView FilteredCollection
{
get
{
return filteredCollection;
}
set
{
filteredCollection = value;
OnPropertyChanged("FilteredCollection");
}
}
public Employee SelectedEmployee
{
get
{
//Application.Current.Dispatcher.BeginInvoke(new Action(() => MessageBox.Show(selectedEmployee.SelectedEmployee.ToString())));
return selectedEmployee;
}
set
{
selectedEmployee = value;
if (selectedEmployee == null)
{
ModeOfExecuting = "Searching / Adding Mode";
OnPropertyChanged("SelectedEmployee");
OnPropertyChanged("ModeOfExecuting");
OnPropertyChanged("FilteredCollection");
}
if (selectedEmployee != null)
{
//MessageBox.Show(Employees[SelectedIndex.GetValueOrDefault()].EmployeeName.ToString());
//List<Employee> FilteredCollectionList = FilteredCollection.Cast<Employee>().ToList();
//MessageBox.Show(FilteredCollectionList[0].EmployeeName);
if (selectedEmployee.EmployeeName != string.Empty)
{
RememberValueEmployeeName = selectedEmployee.EmployeeName;
DynamicSearchEmployeeName = RememberValueEmployeeName;
}
if (selectedEmployee.EmployeeID != null)
{
RememberValueEmployeeID = selectedEmployee.EmployeeID;
DynamicSearchEmployeeID = RememberValueEmployeeID;
}
if (selectedEmployee.EmployeeSalary != null)
{
RememberValueEmployeeSalary = selectedEmployee.EmployeeSalary;
DynamicSearchEmployeeSalary = RememberValueEmployeeSalary.ToString();
}
if (selectedEmployee.EmployeeDesigner != string.Empty)
{
RememberValueEmployeeDesigner = selectedEmployee.EmployeeDesigner;
DynamicSearchEmployeeDesigner = RememberValueEmployeeDesigner;
}
if (selectedEmployee.EmployeeEmailID != string.Empty)
{
RememberValueEmployeeEmailID = selectedEmployee.EmployeeEmailID;
DynamicSearchEmployeeEmailID = RememberValueEmployeeEmailID;
}
ModeOfExecuting = "Editing Mode";
OnPropertyChanged("SelectedEmployee");
}
OnPropertyChanged("SelectedEmployee");
}
}
【问题讨论】:
-
您的目标是什么:Winforms、WPF、ASP..?您应该始终正确标记您的问题,以便人们可以在问题页面上看到它!
-
我总是像现在这样标记我的问题......没有人对此有任何问题。你是第一个... WPF
-
@AdrianPrzemysławDrozdowski 你试过使用
SelectedItems吗?该列表中的顺序应该是选择的顺序(除了批量选择,它们会像显示一样被添加) -
不幸的是 SelectedItems 属性在 Listview 中不可用:(
-
@AdrianPrzemysławDrozdowski 您是否使用自定义
ListView?因为ListView肯定有SelectedItems(见docs.microsoft.com/en-us/dotnet/api/…)
标签: c# wpf mvvm multi-select selecteditem