我在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
}
答案 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);
}