2016-08-23 322 views
0

在Windows UWP項目中,我試圖綁定到以下屬性在這個類XAML綁定到子集合

using System; 
using System.Collections.ObjectModel; 

namespace IAmOkShared.Models 
{ 
    public class Client 
    { 
     public Guid clientId { get; set; } 
     public string lastname { get; set; } 
     public DateTime timestamp { get; set; } 

     //- List af addresses of this client 
     public ObservableCollection<Address> clientaddresses; 

     public Client() 
     { 
      clientId = Guid.Empty; 
      lastname = string.Empty; 
      timestamp = DateTime.Today; 

      clientaddresses = new ObservableCollection<Address>(); 
     } 
    } 
} 

綁定到的clientId和姓氏是沒有問題的,但不能讓它正確的綁定到一個或多個clientaddresses的屬性(如城市,國家)

我的XAML:

​​

不知道如何解決這個問題? 史蒂芬

+0

結合clientaddresses [0]。市將總是結合第一元件集合中,做了你試圖結合等文本= 「{結合clientaddresses.city}」 –

回答

0

要綁定到字段而不是財產

public ObservableCollection<Address> clientaddresses; 

更改爲

public ObservableCollection<Address> Clientaddresses { get; private set; } 

所以不能在視圖模型,然後結合應該工作外實例化。你

還可以創建爲地址額外的數據模板,只是將整個集合在你的客戶的DataTemplate中,因爲這樣你就不會得到可能的索引出界例外,如果你的ClientAddresses集合爲空。

<DataTemplate x:DataType="models:Address"> 
    <TextBlock x:Name="AddressTextBlock" Text="{Binding city}" /> 
<DataTemplate> 

<DataTemplate x:Name="DetailTemplate" x:DataType="models:Client"> 
    <StackPanel Orientation="Vertical"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock x:Name="LastNameTextBlock" Text="{Binding lastname}" /> 
     </StackPanel> 
     <StackPanel Orientation="Vertical"> 
      <ItemsControl ItemsSource="{Binding ClientAddresses}"/> 
     </StackPanel> 
    </StackPanel> 
</DataTemplate> 

還要注意你的模式是不執行INotifyPropertyChanged所以當模特屬性更改用戶界面將不會被更新。

此外,後端專用字段的慣例是以小寫字母開頭,對於使用INotifyPropertyChanged的屬性,您應該以大寫字母開頭。

private int myProperty; 
public int MyProperty { get { ... } set { ... }} 
+0

的Janne,許多感謝,YOUT 做訣竅 –

0

這就是爲什麼我們創建視圖模型和附加特性在它

public Address ClientFirstAddress 
{ 
    get {return clientaddresses[0].city;} 
} 

,然後將其綁定到查看, 記住當你設置clientaddresses調用NofityPropertyChanged該物業的收集