2009-04-13 3 views
8

Silverlight 3.0에서 .NET RIA Services 및 MVVM을 사용하는 경우 RIA Services의 메타 데이터 유형과 MVVM 패턴의 ViewModel간에 차이가 있습니까? 이것들은 동일한 것입니까, 아니면 분리되어 있어야합니까?Silverlight 3.0에서 .NET RIA Services 및 MVVM 결합

메타 데이터 유형은 부분적인 Entity 클래스의 봉인 된 내부 클래스입니다. 적절한 구분이없는 것처럼 보이지만 메타 데이터 유형을 Validation 속성으로 장식하여 ViewModel처럼 보이게 할 수도 있습니다.

나는 주위를 수색했으나 이것에 대해 자세히 이야기하지는 않았다.

답변

11

ChuckJ와 동의 - 일반적으로 DomainContext는 뷰 모델의 일부를 형성합니다. 예를 들어 제품 카탈로그를 검색 할 수있는 검색 페이지가 있다고 가정 해 보겠습니다.

class Catalog : DomainContext { 
    EntityList<Product> Products { get; } 
    void LoadProducts(string keyword); 
} 

뷰 모델은 내가 작성합니다 :

class Catalog : DomainService { 
    IQueryable<Product> GetProducts(string keyword) { ... } 
} 

생성 된 DomainContext : 서버에서

: 여기에 내가 일을 구조 거라고 어떻게

class SearchViewModel { 
    Catalog _catalog = new Catalog(); 

    public IEnumerable<Product> Results { 
     get { return _catalog.Products; } 
    } 

    public void Search(string keyword) { 
     _catalog.Products.Clear(); 
     _catalog.LoadProducts(keyword); 
    } 
} 

그리고 마지막으로 내 xaml에서 UserControl의 DataContext를 SearchViewModel의 인스턴스로 설정하고 ItemsContr을 바인딩합니다. ol을 Results 속성에 추가합니다. 원하는 ViewModel 패턴을 사용하여 버튼 클릭을 검색에 바인딩 할 수 있습니다 (SearchViewModel이 효과적으로 표시하는 명령 임).

<Button Content="Search" 
    fxui:Interaction.ClickAction="$model.Search(keywordTextBox.Text)" /> 

하고 처음 here을 표시 : 나는 개인적으로 내가 같이 Silverlight.FX 작업 한 것을 좋아한다.

Chuck이 언급 한 것처럼 실제로 내 뷰 모델에는 다른 상태가있을 수 있습니다. 예를 들어, SelectedProduct는 내 xaml의 ListBox의 SelectedItem에 양방향으로 바인딩 될 수 있으며 다음과 같은 SelectedProduct를 DataContext로 바인딩합니다. 선택된 제품의 세부 사항을 보여주는 DataForm.

희망 하시겠습니까? 나는 이것에 관해 더 많이 나의 blog에 blogging 할 것이다.

+0

지난 한 주 동안 생각한 끝에 이것이 내가 생각한 것이라고 생각합니다. DomianContext는 완전한 ViewModel가 아니고, 그 일부입니다.DomainService의 MetadataType에 정의 된 속성 (예 : [필수])은 ViewModel에서 다시 선언해야하거나 DomainContext가 유효성 검사 엔진에서 충분히 픽업 할 수있는 ViewModel의 일부인지 여부를 다시 정의해야합니까? –

+0

주제에 대한 Nikhil의 블로그 게시물 링크 : http://www.nikhilk.net/Entry.aspx?id=229 –

+0

[필수] 메타 데이터 속성은보기 모델 자체가 아닌 엔티티 유형에 있습니다. 뷰 모델 (예 : 위의 뷰 모델 샘플에있는 제품)에서 엔티티의 인스턴스를 노출하면 해당 개체가 선택됩니다. –

1

RIA 서비스 데이터 컨텍스트는 기본적으로 데이터 바인딩을 지원하기 때문에 MVVM 패턴의 ViewModel 역할을하도록 설계되었지만 해당 문서에서는 해당 용어를 사용하지 않습니다. 그러나, 그것은 정말로 달려 있습니다. RIA 데이터 컨텍스트가 명령 및 기타 뷰 관련 상태와 같이 제공하는 것보다 뷰 모델에서 상태가 필요할 것입니다. RIA 서비스의 데이터 컨텍스트를 뷰 모델의 일부로 사용하는 것이 좋겠다고 생각합니다.

+0

더 자세히 살펴보면 EntityObject와 해당 MetaDataType을 최대한 숨기고 싶습니다. ViewModel에서 DataContext를 원하지만 EntityObject에서 MetaData 내부 클래스를 제거하고 ViewModel로 옮기고 싶습니다. 옳은? –

+0

기다리십시오. 그것도 맞지 않습니다. 나는 MetaData 클래스가 클라이언트 측의 ViewModel과 서버 측에 있어야한다고 생각한다. 응. 어쩌면 ViewModel이 공유 코드로 속해 있습니까? –

+0

리뷰가 오늘 아침에 답변을 드린 후에 마침내 당신이이 질문에 답했다는 것을 깨달았습니다. 안녕 척. 오랜만이야. 희망 삶이 당신을 잘 대하고 있습니다. –