使组合框在视图模型中可用
本文关键字:模型 视图 组合 | 更新日期: 2023-09-27 18:19:59
我在xaml文件中有一个组合框。通过将datacontext传递到我的视图模型文件。我想从我的视图模型文件中添加组合框上下文。我如何通过mvvm模式实现这一点
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
}
首先,我认为您必须阅读更多关于MVVM模式的内容。ViewModel不应该知道任何关于视图(组合框所在的位置)的信息。
视图的DataContext设置为ViewModel,而不是相反。
view.DataContext = viewModel
如果您想用值填充组合框,请在viewModel 中添加一个属性
public ObervableCollection<string> Values {get; set;}
然后将组合框ItemsSource绑定到Values属性
<ComboBox ItemsSource="{Binding Values}"
SelectedItem="{Binding MySelectedItem, Mode=TwoWay}" />
还要将MySelectedItem弹出框添加到ViewModel中,以获得选定的值。(您也可以在ViewModel上实现INotifyPropertyChanged接口)
public string SelectedItem {get; set;}
现在,如果在ViewModel中设置Values属性,则组合框将获得数据列表。首先,从阅读器中填充一个List,然后将其用作ObservableCollection构造函数的参数。
Values = new ObervableCollection<string>(listOfeNAME);
试试这个:
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);
}