2011-05-16 3 views
4

내 제목이 잘 문제를 설명하는 경우 모르겠어요.MVVM 바인딩 viewmodel 속성 viewmodel 속성

내 응용 프로그램에서는 에 대한 서비스 요청 - 고객 목록 검색. - 조직 목록을 검색합니다.

그러면이 고객 목록을 내보기의 목록 상자에 바인딩합니다. 내 뷰 모델에서

나는 다음과 같은 속성이 있습니다

IEnumerable<Organisation> Organisations 
ObservableCollection<Customer> Customers 

조직 특성 : OrganisationId, OrganisationName

고객 속성 : 고객 ID, OrganisationId, CustomerFirstName, CustomerLastName

내보기에 목록 상자 내부

을 목록에있는 각 고객의 조직 이름을 보여주고 싶습니다.

내보기에서 이것을 바인딩 할 수 있습니까? 고객을위한 조직 이름을 표시하는 텍스트 블록 만 있으면됩니다.

+0

기본적으로 ID를 사용하여 이름의 관계형 데이터베이스 조회를 원하십니까? –

답변

4

내가 고객의 ViewModel의 모델을 평평 것 ... 당신은 실버로 제한하는 경우 태그가 비록 제안으로는 MultiBinding이에 대한 MultiValueConverter, 이것은 슬프게도 수 없습니다 사용합니다 :

:
class CustomerViewModel : INotifyPropertyChanged 
{ 
    public string OrgName { get; } 
    public string FirstName {get; } 
    public string LastName { get; } 
} 

그런 다음 소유 뷰 모델은 고객의 컬렉션을 반환

바인드 CustomerViewModel에 ORGNAME 속성에 목록 상자 :

<ListBox> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding FirstName}"/> 
       <TextBlock Text="{Binding OrgName}"/> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
0

나는

0

난 당신이 모델을 평평하게해야한다는 Ritch에 동의하지만, 당신이 정말로 그렇게하지 않으려면, 당신이 사용할 수 IValueConverter. 이름을 표시 할 위치에 대한 바인딩에서 조직을 다른 컨트롤의 datacontext로 설정하면 요소 간 바인딩을 수행하고 바인딩에서 다른 컨트롤의 datacontext를 전달할 수 있으며 ConverterParameter 전달에서 OrganizationId, 변환기 코드에서 약간의 LINQ를 사용하여 원하는 이름을 반환하십시오.

0

ViewModel에서 노출 된 Linq 쿼리에 목록 상자를 바인딩하십시오.

Public IEnumerable ItemsView 
{ 
get { 
return 
    { 
    from customer in this.Customers 
    from org in this.Organisations 
    where customer.OrganisationId=org.OrganisationId 
    select new { FirstName=customer.FirstName, LastName=customer.LastName, OrganisationName=org.OrganisationName} 

}; 
} 

그런 다음 목록 상자를 Ritch의 답변에 바인딩합니다.

추신. 코드가 완벽하지 않을 수 있도록이 코드를 내 휴대폰에 쓰고 있습니다.

관련 문제