2016-07-18 1 views
0

기본값을 ComboBox으로 설정하려고합니다. 나는 레이아웃에서 바인딩을 사용하고 있는데 어떻게 바인딩하는지 잘 모르겠습니다. 내가 데이터를 설정하고 어떻게ComboBox의 기본 선택 값

public class ViewModel : INotifyPropertyChanged 
{ 
    private Sklady sklady = null; 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 

    public Sklady Sklady 
    { 
     get 
     { 
      return this.sklady; 
     } 
     set 
     { 
      this.sklady = value; 
      NotifyPropertyChanged("Sklady"); 
     } 
    } 
} 

viewModel에 :

private void comboBoxSklad_Loaded(object sender, RoutedEventArgs e) 
{ 
    //get some data 
    prijemWindow.viewModel.Sklady = sklady; 
    prijemWindow.viewModel.Sklady.skladID = prijemWindow.viewModel.Radky.radky[index].SKLAD; 
} 

viewModel 사용 값을 얻기 위해이 클래스 :

[DataContract] 
public class Sklady 
{ 
    [DataMember] 
    public List<Sklad> sklady { get; set; } 
    [DataMember] 
    public String skladID { get; set; } 

    public class Sklad 
    { 
     public string ID { get; set; } 
     public string NAME { get; set; } 
     public string CODE { get; set; } 
    } 
} 

그리고 이것은 현재 xaml 코드를 여기 내 viewModel입니다 :

<ComboBox Name="comboBoxSklad" Loaded="comboBoxSklad_Loaded" ItemsSource="{Binding Sklady.sklady}" DisplayMemberPath="CODE" 
     SelectedValuePath="ID" SelectedItem="{Binding Sklady.skladID}"/> 

데이터가 ComboBox에 올바르게 바인딩되어 있으며 skladyList의 데이터를 볼 수 있습니다. 그러나 ComboBox 기본값을 skladID 값으로 설정하고 싶습니다. 내가 어떻게 해?

답변Klaus Byskov Pedersen에서 답을

내가 먼저, 내가 SelectedValue 대신 SelectedItem의 사용 ... 그럼, 생성자 prijemWindow.viewModel.Sklady = new Sklady();prijemWindow.viewModel.Sklady = new Sklady();Sklady을 ininialize과 끝 부분에 라인을 변경 ... 작동 얻을 :

sklady.skladID = prijemWindow.viewModel.Radky.radky[index].SKLAD; 
prijemWindow.viewModel.Sklady = sklady; 

감사합니다.

답변

2

SelectedItem 대신 SelectedValue을 사용하십시오.

<ComboBox Name="comboBoxSklad" Loaded="comboBoxSklad_Loaded" ItemsSource="{Binding Sklady.sklady}" DisplayMemberPath="CODE" 
    SelectedValuePath="ID" SelectedValue="{Binding Sklady.skladID}"/> 

SelectedItem를 사용하여 바인딩 된 항목 유형 Sklady하지 string이 될 것입니다.

편집`

prijemWindow.viewModel.Sklady = sklady; 
prijemWindow.viewModel.Sklady.skladID = prijemWindow.viewModel.Radky.radky[index].SKLAD; 

당신이 viewModel.Sklady을 설정하지만이 발사 될 때, 당신은 아직 skladID 그래서이 두 문장의 순서를 변경하려고 설정하지 않은 경우는 NotifyPropertyChanged 있습니다.

+0

답장을 보내 주셔서 감사합니다. 이게 정말 도움이되지만 여전히 작동하지 않습니다. 내 문제는 그 문제는'ItemsSource = "{Binding Sklady.sklady}"와'SelectedValue = "{Binding Sklady.skladID}"'...하지만 ... 이 두 값을 올바르게 설정하는 방법을 모르겠다. – Sk1X1

+0

@ Sk1X1 내 편집을 참조하십시오. –

+0

목록 ('Sklady')을 어딘가에 초기화해야합니다. 생성자에서. 'Sklad' 클래스를'Sklady' 클래스에서 옮기는 편이 낫습니다. 후자는 실제로 말이되지 않습니다. 'Sklad'의 목록에 대해 하나의'skladId'를 가지고 있습니까? 왜? – mechanic