2011-05-16 135 views
4

不知道我的標題是否解釋我有問題。MVVM綁定viewmodel屬性子視圖模型屬性

在我的應用程序中,我撥打 的服務電話 - 檢索客戶列表。 - 檢索組織列表。

然後我將這個客戶列表綁定到我的視圖上的列表框。

在我的視圖模型我有以下特性:

IEnumerable<Organisation> Organisations 
ObservableCollection<Customer> Customers 

組織屬性:OrganisationId,OrganisationName

客戶屬性:客戶編號,OrganisationId,CustomerFirstName,CustomerLastName

在我看來,列表框裏面我想在列表中顯示每個客戶的組織名稱。

我該如何去約束這在我看來?我只想要一個文本塊來顯示客戶的組織名稱。

+0

所以基本上你想要一個類似關係數據庫的名稱查找使用ID? – 2011-05-16 23:49:37

回答

4

我拼合模式在客戶視圖模型:

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

然後所屬的視圖模型返回客戶的集合:

public class StoreViewModel : INotifyPropertyChanged 
{ 
    public ObservableCollection<CustomerViewModel> Customers { get; } 
} 

綁定列表框對CustomerViewModel的ORGNAME屬性:

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

我將採用一個MultiBinding和這個MultiValueConverter,這是可悲的是不可能的,如果你被限制的Silverlight作爲標籤建議,但...

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的答案綁定列表框。

PS。我在我的手機上寫這個代碼可能不完美。

相關問題