私は、ユーザーが会社の従業員の詳細をデータベースに入力できるようにするアプリケーションを開発しています。これまでのところ、私はWPFを試し、EntityFrameworkを使用しながらアプリケーション内にMVVMを実装しようとしています。
私はMaster-Detailアプリケーションを作成しており、MVVMを使用してこれを実現する方法を研究しています。これは、すべてに非常に慣れていないためです。
私が試した方法の1つは、View-Model
called内にプロパティを作成し、それをxaml内SelectedEmployee
のaにバインドすることです。List View
public Employee _SelectedEmployee;
public Employee SelectedEmployee
{
get
{
return _SelectedEmployee;
}
set
{
if (_SelectedEmployee == value)
return;
_SelectedEmployee = value;
OnPropertyChanged("SelectedEmployee");
}
}
<ListView HorizontalAlignment="Left" Name="listview" VerticalAlignment="Bottom" ScrollViewer.HorizontalScrollBarVisibility="Visible"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding LoadEmployee}" SelectionMode="Single" SelectedItem="{Binding SelectedEmployee, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Height="150" Grid.Row="1">
次に、ユーザーがSelectedItem
内でを更新できるようにするメソッドがありますList View
。しかし、ここで問題が発生します。からアイテムを選択するList View
と、データベースの最初の行のみが更新され、選択したい行は更新されません。
これが方法です。
public void UpdateEmployee(Employee emp)
{
using (DBEntities context = new DBEntities())
{
emp = context.Employees.Where(e => e.EmployeeID == SelectedEmployee.EmployeeID).FirstOrDefault();
emp.Title = Title;
emp.FirstName = FirstName;
emp.Surname = Surname;
emp.Position = Position;
emp.DateOfBirth = DateOfBirth;
emp.Address = Address;
emp.Country = Country;
emp.Postcode = Postcode;
emp.PhoneNumber = PhoneNumber;
emp.MobileNumber = MobileNumber;
emp.FaxNumber = FaxNumber;
emp.Email = Email;
emp.NINumber = NINumber;
emp.ChargableResource = ChargableResource;
emp.ChargeOutRate = ChargeOutRate;
emp.TimeSheetRequired = TimeSheetRequired;
emp.WorkShift = WorkShift;
emp.BenefitsProvided = BenefitsProvided;
context.Employees.ApplyCurrentValues(emp);
context.SaveChanges();
}
}
自分のプロパティを自分のxaml内にバインドしてview model
から、text-boxes
を実装しOnPropertyChanged
ました。code-behind
また、コマンドを使用して、テスト容易性と保守性にとって重要な量を制限しています。
更新するコマンドメソッドは次のとおりです。
private ICommand showUpdateCommand;
public ICommand ShowUpdateCommand
{
get
{
if (showUpdateCommand == null)
{
showUpdateCommand = new RelayCommand(this.UpdateFormExecute, this.UpdateFormCanExecute);
}
return showUpdateCommand;
}
}
private bool UpdateFormCanExecute()
{
return !string.IsNullOrEmpty(FirstName) ...
}
private void UpdateFormExecute()
{
UpdateOrganisationTypeDetail();
}
私はMVVMを初めて使用するので、何が間違っているのかよくわかりません。入力していただければ幸いです:)。