2014-02-12 2 views
0

ObersvableCollection에 저장된 각 개체의 값을 ComboBox에 바인딩하고 싶습니다. 불행히도 그것은 작동하지 않습니다. 코드에서 목록에 저장된 콤보 상자에 개체 값 바인딩

<ComboBox Grid.Column="1" Margin="0,0,0,5" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" FontSize="15" ItemsSource="{Binding Path=UserAccounts}" > 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding EMailAddress}"/> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

내가 DataContext를 설정 뒤에 :

[XmlRoot] 
public class AccountSettingsObj : ModelBase 
{ 
    public string FirstName { get; set; } 

    public string LastName { get; set; } 

    private string _eMailAddress; 
    public string EMailAddress 
    { 
     get { return _eMailAddress; } 
     set 
     { 
      _eMailAddress = value; 
      OnPropertyChanged("EMailAddress"); 
     } 
    } 
} 

감사 :

public class PersitentDataModelUserSettings : ModelBase 
{ 
    private static PersitentDataModelUserSettings instance = new PersitentDataModelUserSettings(); 

    public static PersitentDataModelUserSettings Instance 
    { 
     get { return instance; } 
     set { instance = value; } 
    } 

    private ObservableCollection<AccountSettingsObj> _userAccounts = new ObservableCollection<AccountSettingsObj>(); 

    public ObservableCollection<AccountSettingsObj> UserAccounts 
    { 
     get { return _userAccounts; } 
     set 
     { 
      _userAccounts = value; 
      OnPropertyChanged("UserAccounts"); 
     } 
    } 
} 

이 객체 유형 :

여기
this.DataContext = PersitentDataModelUserSettings.Instace.UserAccounts; 

가 모델입니다! 당신은이에 콤보 상자 ItemSource을 설정하는

+0

작동하지 않으면 콤보 상자에 항목이 없거나 빈 줄이 가득한 콤보 상자에 있습니까? – Josh

+0

도 아니다. 콤보 박스 높이는 목록에 몇 개의 항목이 있더라도 변경되지 않습니다. – aDoubleSo

+0

높이가 변하지 않는다는 것은 무엇을 의미합니까? 당신이 가지고있는 것은 높이를 변화 시켜서는 안됩니다 : 그것은 당신의 UserAccounts로 콤보 박스 드롭 다운리스트를 채워야합니다. UserAccounts 컬렉션에 몇 개의 항목이 있습니까? – Mashton

답변

1

:

ItemsSource="{Binding Path=UserAccounts}" 

하지만 당신은이에 콤보 상자의 DataContext를 설정 :

this.DataContext = PersitentDataModelUserSettings.Instace.UserAccounts; 

그래서 바인딩 엔진은 UserAccounts 재산 UserAccounts를 찾고 있습니다.


두 가지 방법으로 해결할 수 있습니다 : ItemsSource="{Binding}"을 :

  • 중 하나는 다음과 같이 바인딩 ItemsSource를 설정합니다. 이렇게하면 ItemSource은 ComboBox의 DataContext과 같습니다.

  • 또는 DataContext를 인스턴스로만 설정하십시오 (this.DataContext = PersitentDataModelUserSettings.Instace.UserAccounts;). 이 방법 당신은 UserAccounts에서 PersitentDataModelUserSettings 재산을 찾기 위해 PersitentDataModelUserSettings 및 BindingEngine 요청 인스턴스를 가리 키도록 에게 DataContext에을 설정합니다.

+1

많은 사람에게 감사합니다 !! – aDoubleSo

+0

당신도 환영합니다. –

+0

또 하나의 질문 : 객체에 객체가 있고 내부 객체의 값을 가져 오려고한다고 가정 해 봅시다. 이것을 참조하는 방법. 포인트 표기법으로이 문제를 해결할 수 있습니까? – aDoubleSo

관련 문제