У меня странная проблема. Мне не очень удобно. NET WPF.
У меня есть Datagrid, где есть список сотрудников, и мне нужно загрузить в текстовое поле фамилию и имя выбранного сотрудника. У меня есть архитектура MVVM.
Список моих сотрудников загружается очень хорошо, но когда я хочу нажать на сотрудника, ничего не происходит. Мое текстовое поле должно быть заполнено фамилией и именем. Я что-то пропустил?
Вот мой код.
Datagrid
<DataGrid Name="dgCustomers" SelectedItem="{Binding SelectedEmployee}" Margin="6" Grid.Row="1" AutoGenerateColumns="False" ItemsSource="{Binding EmployeesList}" IsReadOnly="True">
<DataGrid.Columns>
<!--<DataGridTextColumn Binding="{Binding LastName}" Header="Name" Width="*" />-->
<DataGridTextColumn Binding="{Binding FullName}" Header="First Name" Width="*" />
<DataGridTextColumn Binding="{Binding DisplayBirthDate}" Header="Birth Date" Width="*" />
</DataGrid.Columns>
</DataGrid>
TextBox
<TextBox Height="27" Margin="6,6,6,5" Text="{Binding LastName, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Height="27" Margin="6,6,6,5" Text="{Binding FirstName, UpdateSourceTrigger=PropertyChanged}"/>
Класс Employee в моей ViewModel
class EmployeeVM : INotifyPropertyChanged
{
private NorthwindEntities2 context = new NorthwindEntities2(); //db
private ObservableCollection<EmployeeDTO> employeesList;
private DelegateCommand addCommand;
private EmployeeDTO selectedEmployee;
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public ObservableCollection<EmployeeDTO> EmployeesList
{
get
{
if (employeesList == null)
{
employeesList = LoadEmployees();
}
return employeesList;
}
}
/* public DelegateCommand SaveCommand
{
get
{
if (addCommand != null)
return addCommand;
return new DelegateCommand(null); //a completer
}
}*/
public EmployeeDTO SelectedEmployee
{
get { return selectedEmployee; }
set { selectedEmployee = value; }
}
private ObservableCollection<EmployeeDTO> LoadEmployees()
{
ObservableCollection<EmployeeDTO> toReturn = new ObservableCollection<EmployeeDTO>();
foreach (var item in context.Employees)
{
toReturn.Add(new EmployeeDTO(item));
}
return toReturn;
}
класс employeeDto
class EmployeeDTO : INotifyPropertyChanged
{
private string fullname;
private string lastname;
private string firstname;
private string title;
private DateTime? birthDate;
private DateTime? hireDate;
private string displayBirthDate;
public EmployeeDTO(Employee employee)
{
lastname = employee.LastName;
firstname = employee.FirstName;
title = employee.Title;
birthDate = employee.BirthDate;
hireDate = employee.HireDate;
fullname = firstname + " " + lastname;
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public string DisplayBirthDate
{
get { return displayBirthDate = birthDate.ToString(); }
}
public string FullName
{
get { return fullname; }
set { fullname = value; }
}
public string LastName
{
get { return lastname; }
set { lastname = value; OnPropertyChanged("FullName"); }
}
public string FirstName
{
get { return firstname; }
set { firstname = value; OnPropertyChanged("FullName"); }
}
public DateTime? BirthDate
{
get { return birthDate; }
set { birthDate = value; OnPropertyChanged("DisplayBirthDate"); }
}
public DateTime? HireDate
{
get { return hireDate; }
set { HireDate = value; }
}
}