2014-08-28 5 views
0

xaml 파일에 콤보 박스가 있습니다. 내 viewmodel 파일에 datacontext를 전달하여 내보기 모델 파일에서 콤보 상자 컨텍스트를 추가하고 싶습니다. 내가 MVVM 패턴viewmodel에서 콤보 박스를 만들 수 있습니다.

XAML 코드를 통해이를 수있는 방법 : 뷰 모델 파일에서

<ComboBox Binding.XmlNamespaceManager="SelectNameCB" 
      FontSize="15" 
      Margin="10,0,0,0" 
      HorizontalAlignment="Left" 
      VerticalAlignment="Top" 
      Width="207" /> 

, SelectNameCB는 현재 컨텍스트에서 자사 사용할 수없는 상태. 의 ViewModel 파일 난 당신이 MVVM 패턴에 대한 자세한 내용을 생각 모든

private void ComboBoxdata() 
{ 
    OleDbConnection ConDb; 
    String eID; 

    ConDb = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Admin\\Documents\\Visual Studio 2012\\Projects\\Feedback\\Feedback.accdb"); 

    try 
    { 
     ConDb.Open(); 
     OleDbCommand DBSelect = new System.Data.OleDb.OleDbCommand("select FName, LName,ID_NAME from NameList", ConDb); 
     OleDbDataReader reader = DBSelect.ExecuteReader(); 



     while (reader.Read()) 
     { 
      string eNAME = ""; 
      eID = reader["ID_NAME"].ToString(); 

      eNAME += reader["FName"].ToString(); 
      eNAME += " " + reader["LName"].ToString(); 

      SelectNameCB.Items.Add(eNAME); 


     } 
    } 
    catch (Exception ae) 
    { 
     MessageBox.Show(ae.Message); 

    }//catch 
} 
+1

가 안전하게 'MVVM'태그를 제거 할 수 있습니다 이런 식으로 말했다. – icebat

답변

1

이 시도 질문

ConDb.Open(); 
OleDbCommand DBSelect = new System.Data.OleDb.OleDbCommand("select FName, LName,ID_NAME from NameList", ConDb); 
OleDbDataReader reader = DBSelect.ExecuteReader(); 
while (reader.Read()) 
{ 
    string eNAME = ""; 
    eID = reader["ID_NAME"].ToString(); 
    eNAME += reader["FName"].ToString(); 
    eNAME += " " + reader["LName"].ToString(); 

    MyComboBoxData.Add(eNAME); 
} 
1

첫째. ViewModel은 ComboBox가 상주하는 View에 대해 아무것도 알지 못합니다.

뷰의 DataContext는 다른 방법으로 ViewModel로 설정됩니다.

view.DataContext = viewModel 

이 값은 뷰 모델

public ObervableCollection<string> Values {get; set;} 

에 속성을 추가로 그런 다음 값 속성에 콤보를 ItemsSource 바인딩 콤보 상자를 채우려면

<ComboBox ItemsSource="{Binding Values}" 
      SelectedItem="{Binding MySelectedItem, Mode=TwoWay}" /> 

는 또한 MySelectedItem의 poperty를 추가 선택된 값을 얻기 위해 ViewModel에 전달한다. 당신이 콤보 상자 데이터의 목록을 얻을 것이다 뷰 모델의 값 속성을 설정하면 이제

public string SelectedItem {get; set;} 

을 (당신은 또한 당신의 ViewModel에에서 INotifyPropertyChanged 인터페이스를 구현 할 수있다). 먼저 목록에서 독자를 채운 다음 ObservableCollection 생성자에 대한 매개 변수로 사용합니다. 이 너무

private List<string> _MyComboBoxData; 
public List<string> MyComboBoxData 
{ 
    get 
    { 
     return _MyComboBoxData; 
    } 
    set 
    { 
     _MyComboBoxData = value; 
     OnPropertyChanged(() => MyComboBoxData); 
    } 
} 

과 :

Values = new ObervableCollection<string>(listOfeNAME); 
+0

문제가 해결되었습니다. 감사!!! –

관련 문제