귀하의 질문은 매우 광범위하지만, ViewModel이 데이터를 가져 와서 EF 클래스를 통해 업데이트를 제출하는 방법을 결정함으로써 시작할 수 있습니다.
EF 유형을 직접보기에 바인딩 할 수 있지만 더 나은 방법은 ViewModel을 가능한 많이 ORM 모델 유형과 분리하는 것입니다. EF 유형을 제외하고 동작 (ICommand) 및 데이터 (ViewModel 소품 또는 하위 ViewModel 소품 또는 ObservableObjects) 측면에서보기의 요구를 모델링합니다.
그런 다음 데이터 모델과 직접 상호 작용하고 ViewModel을 데이터 모델로 변환하거나 그 반대로 변환 할 ViewModel에서 주입하거나 인스턴스화 할 수있는 서비스 유형을 작성하십시오. LINQ/Lambdas를 사용하여 수동으로 작업하거나 AutoMapper와 같은 것을 사용하여 ViewModel과 데이터 모델 (EF 유형) 간의 관계를 정의 할 수 있습니다. 이는 데이터 스키마와 ViewModel 사이의 명확한 경계를 유지하며, 이런 식으로 앱에 파급 효과가 적은 데이터 모델의 변경 사항을 발견 할 것입니다.
내가 '서비스 유형'이라고 부르는 중간 계층은 저장소가 crud 작업보다 비즈니스 운영에 더 중점을두고 있지만 내부적으로 모든 저장소 또는 EF 호출을 만드는 것보다 높은 수준의 인터페이스를 제공하는 유형 일 수 있습니다 뷰 모델을 대신하여
프레임 워크를 사용하지 않으려면 MVVM Light 코어 라이브러리를 다운로드하고 포함 된 항목을 확인해야합니다. 그것의 꽤 의지와 MVVM을 지원하는 기본 견과류와 볼트를 제공합니다. 원하는 경우 롤업을 선택할 수 있지만 그만한 가치는 없을 수도 있습니다.
EDIT : 시간이 부족하다고 말씀 하셨기 때문에 ... 권장하지는 않지만보다 편리하지만 덜 강력한 솔루션은 ViewModels의 속성으로 뷰를 직접 EF 유형에 바인딩하는 것일 수 있습니다 . 당신의 그런 ViewModelBase {
public EditCustomerViewModel(){
_currentCustomerCommand = new RelayCommand(SaveCustomer);
}
private Customer _currentCustomer;
private void SaveCustomer(){
using(var ctx = new EfDataContext()){
// Save operation here
}
}
public Customer CurrentCustomer{
get { return _currentCustomer; }
set { Set(()=>CurrentCustomer, ref _currentCustomer, value); }
}
public ICommand SaveCustomerCommand{ get { return _saveCustomerCommand;}}
}
:
는 ViewModelBase() 메소드 당신에게
공용 클래스 EditCustomerViewModel를 특별한 설정을 제공 MVVM 빛 //에 포함 된 사용 // 컨트롤을 바인딩 할 수 있는지, 무엇이든지 CurrentCustomer 속성에있을 수 있습니다. EF 저장은 MVVM Light RelayCommand 구현으로 표시된 명령을 통해 수행 할 수 있습니다.따라서 빠르고 더러운 접근 방식이 효과적 일 수 있지만 뷰의 요구에 부응하기 위해 명시 적으로 제작 된 유형으로 데이터를 표시함으로써 ViewModels에서 데이터 모델을 추상화하려고 할 수 있다면 가능합니다.
나는 여기에서 배우고있다 : http://www.codeproject.com/Articles/29054/WPF-Data-Binding-Part-1 – Naresh
당신의 제안에 감사드립니다. 그러나 이것은 기존 데이터베이스에서 생성 된 클래스를 사용하는 것에 대해서는 아무 것도 표시하지 않습니다. 나는 시간이 조금 부족하다. – user2317150