使视图模型中的组合框可用

时间:2014-08-28 09:39:29

标签: c# wpf xaml mvvm combobox

我在xaml文件中有一个组合框。 通过将datacontext传递给我的viewmodel文件。 我想从我的视图模型文件中添加组合框上下文。 我如何通过 mvvm模式

实现这一目标

xaml代码

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

在viewmodel文件中,SelectNameCB声明它在当前上下文中不可用。 viewmodel文件

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
}

2 个答案:

答案 0 :(得分:1)

首先,我认为您必须阅读有关MVVM模式的更多信息。 ViewModel不应该知道有关View(ComboBox所在的位置)的任何信息。

视图的DataContext设置为ViewModel,而不是相反。

view.DataContext = viewModel

如果要使用值填充组合框,请向viewModel添加属性

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

然后将组合框ItemsSource绑定到Values属性

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

还要向ViewModel添加MySelectedItem属性以获取所选值。 (您也可以在ViewModel上实现INotifyPropertyChanged接口)

public string SelectedItem {get; set;}

现在,如果您在ViewModel中设置Values属性,Combobox将获取您的数据列表。首先从阅读器填充List,然后将其用作ObservableCollection构造函数的参数。

Values = new ObervableCollection<string>(listOfeNAME);

答案 1 :(得分: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);
}