2014-08-28 59 views
0

Im在xaml文件中有一个组合框。 通过将datacontext传递给我的viewmodel文件。 我想从我的视图模型文件中添加组合框上下文。 我怎样才能做到这一点,通过MVVM模式make combobox availabe in viewmodel

XAML代码

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

在视图模型文件,SelectNameCB指出它不是在目前的情况下可用。 视图模型文件

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 2014-08-28 09:43:16

回答

1

试试这个:

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

这也太:

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

首先我认为你需要阅读更多有关MVVM格局。 ViewModel不应该了解任何关于View的信息(ComboBox所在的位置)。

视图的DataContext设置为ViewModel而不是其他方式。

view.DataContext = viewModel 

如果你想填充组合框与值增加一个属性视图模型

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

随后的ItemsSource绑定组合框的值属性

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

还添加MySelectedItem poperty到ViewModel以获取选定的值。 (您也可以实现您的视图模型INotifyPropertyChanged接口)

public string SelectedItem {get; set;} 

现在,如果你设置视图模型Values属性组合框将得到的数据列表。首先从阅读器中填充一个List,然后将其用作ObservableCollection构造函数的参数。

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

问题解决了!谢谢!!! – 2014-08-28 13:30:04