У меня есть всплывающее окно 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), загружаемый списком строк, каждая строка, содержащая как имя, так и идентификатор, как эта
<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 для Employee. Кроме того, убедитесь, что вы используете интерфейс INotifyPropertyChanged.
public Employee SelectedEmployee
{
get
{
return _selectedEmployee;
}
set
{
_selectedEmployee= value;
RaisePropertyChanged("SelectedEmployee");
}
}
Если вы хотите только имя или идентификатор, то используйте 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");
}
}