2012-01-17 3 views
0

WPF에서 MVVM 패턴을 테스트하고 WCF 데이터 서비스를 사용하여 데이터베이스 (예 : 고객 목록)에서 일부 레코드를 검색했습니다. 따라서 View Model에서 모든 고객을 검색하는 특정 서비스를 호출합니다. 보기에서 객체 고객에게 변경 사항을 적용 할 때 변경 사항을 추적하는 방법이 있습니까? EntityState와 같은 것.뷰 모델의 엔터티 변경 내용 추적

제발 도와주세요!

+0

이 정보가 도움이 되나요? http://stackoverflow.com/questions/6332802/how-to-track-entity-changes-with-wcf-ria-services – davidsleeps

답변

0

ViewModel 데이터 개체에 INotifyPropertyChanged이 상속되면 부울 속성을 설정하여 변경된 사항을 표시 할 수 있습니다.

1

엔티티에서 자체 변경 내용 추적 동작을 구현할 수 있습니다. 변경 추적이 필요한 여러 엔티티가 있습니다. 변경 추적의 핵심 기능을 구현하기위한 공통 기본 클래스를 사용하는 것이 좋습니다.

하지만 엔티티의 프레임 워크를 사용하는 자체 추적 엔티티도 옵션입니다. STE와 poco (Plain Old Clr Objects) 엔티티 사용에 관한 많은 게시물이 이미 있습니다. 여기를 참조하십시오 :

Introduction to ADO.NET Entity Framework

STE's vs Poco entities

STE's vs Poco

0

는 고객 목록은 '고객'이라는 속성과 더불어, 뷰 모델 클래스를 말해봐. 3 일이 변경 될 수 있습니다

  1. 뷰 모델에서 고객 속성 (예는 전체 목록 변경합니다. this.customers = 새 목록
  2. 당신은 추가하거나 목록에서 항목을 제거를
  3. 이미 목록에서 특정 고객의 특성의 변화 (예를 들어, 고객 [0] .address = 'XXX'는;.

는 WPF 모든 경우를 처리 할 수있는 바인딩 메커니즘은 올바른 이벤트를 발생 제공에 따라 다름 귀하의 시나리오는 일어날 수있는 각각의 사건을 처리해야합니다.

귀하의 고객 컬렉션을 변경할 수 없다는 말로 간단히 해결하십시오. 즉, ViewModel을 생성하는 동안 고객 목록을 할당하고이 속성을 바꾸지 않습니다.

# 2의 경우 가장 좋은 것은 ObservableCollection이라는 .NET 개체를 다시 사용하는 것입니다. 이 컬렉션은 INotifyPropertyChanged를 구현하고 추가, 제거, 지우기 등의 호출시 올바른 인수를 사용하여 올바른 알림을 발생시킵니다.

# 3의 경우 Customer 개체에 대해 INotifyPropertyChanged를 구현해야합니다. 예를 들어 :

public class Customer : INotifyPropertyChanged 
{ 
    public PropertyChangedEventHandler PropertyChanged; 

    private string _name; 
    public string name { 
     get { return _name; } 
     set { _name = value; ... /* add code to fire exception */ } 
    } 

    ... // more properties 
} 

지금, 뷰 모델에서, 당신은 단지 바인드해야, UI에서 관찰 모음을

public class ViewModel 
{ 
    public ObservableCollection<Customer> customers { get; private set; } 

    ViewModel() { 
     // Allocate it once during construction 
     customers = new Observablecollection<Customer>() 
    } 
} 

있습니다. 사용중인 ItemsControl이 무엇이든간에 :

<ItemsControl DataSource="{Binding customers}"> 
    <!-- The template to display the items here --> 
</ItemControl> 

이제 고객 컬렉션을 서버의 동기화와 동기화해야합니다. 고객에게하는 모든 변경 사항은 UI에 반영됩니다.