我是 WPF 新手,开始学习 MVVM 概念。
我正在开发一个创建图形对象的应用程序,该对象包含来自数据库的数据。
我有一个包含多个标签和组合框的组合框。
每个人都应该持有一个来自我的数据库的列表。
对于第一个组合框,我设法使用 MVVVM 为该特定列表填充它。
但是,如果我已经使用第一个列表启动 DataContext,我该如何填充其他组合框?
我应该为每个 ComboBox 创建一个 ModelView 吗?
一般来说,我怎样才能将几个组合框动态绑定到列表?
<Label Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="2"
Name="lblTiNam">Test Item Name :</Label>
<TextBox Grid.Row="0"
Grid.Column="2"
Name="tbTiName"
MinWidth="100"
MaxWidth="100"></TextBox>
<Label Grid.Row="1"
Grid.Column="0"
Grid.ColumnSpan="2"
Name="lblTiExStat">Execution Status :</Label>
<ComboBox Grid.Row="1"
Grid.Column="2"
x:Name="cbTiExStat"
MinWidth="100"
MaxWidth="100"
SelectedValuePath="Content"
ItemsSource="{Binding Binding QcLists.FieldList}"
DisplayMemberPath="Name">
</ComboBox>
<Label Grid.Row="2"
Grid.Column="0"
Grid.ColumnSpan="2"
Name="lblTiVersion">Version :</Label>
<ComboBox Grid.Row="2"
Grid.Column="2"
Name="cbTiVersion"
MinWidth="100"
MaxWidth="100"
SelectedValuePath="Content"
SelectedIndex="1">
<ComboBoxItem>To BE Bind From QC</ComboBoxItem>
</ComboBox>
<Label Grid.Row="3"
Grid.Column="0"
Grid.ColumnSpan="2"
Name="lblTiCRID">CRID :</Label>
<ComboBox Grid.Row="3"
Grid.Column="2"
Name="cbTiCRID"
MinWidth="100"
MaxWidth="100"
SelectedValuePath="Content">
<ComboBoxItem>To BE Bind From QC</ComboBoxItem>
</ComboBox>
<Label Grid.Row="4"
Grid.Column="0"
Grid.ColumnSpan="2"
Name="lblTiApplication">Application :</Label>
<ComboBox Grid.Row="4"
Grid.Column="2"
Name="cbTiApplication"
MinWidth="100"
MaxWidth="100"
SelectedValuePath="Content">
<ComboBoxItem>To BE Bind From QC</ComboBoxItem>
</ComboBox>
<Label Grid.Row="5"
Grid.Column="0"
Grid.ColumnSpan="2"
Name="lblTiTestLevel">Test Level :</Label>
<ComboBox Grid.Row="5"
Grid.Column="2"
Name="cbTiTestLevel"
MinWidth="100"
MaxWidth="100"
SelectedValuePath="Content">
<ComboBoxItem>To BE Bind From QC</ComboBoxItem>
</ComboBox>
我正在编辑我的问题以添加更多信息:
内部类 TestableItemViewModel { public QCLists QcLists { get { return _qcLists; } }
#endregion
#region Constructor
public TestableItemViewModel()
{
_qcconnect = QCConnection.QCConnect.getInstance();
// LoadListSettings();
LoadListSettings( "TS_USER_05");
SaveCommand = new TestableItemSaveDetailsCommand(this);
}
#endregion
private void LoadListSettings(String FieldName)
{
Customization cust = QCConnection.QCConnect.getInstance().GetTD.Customization;
CustomizationFields fields = cust.Fields;
CustomizationListNode node;
CustomizationField field;
field = fields.get_Field("TEST", FieldName);
node = field.List.RootNode;
_qcLists = new QCLists(node.Children, node.Name);
}
}
class QCLists:INotifyPropertyChanged
{
TDAPIOLELib.List _fieldList;
List<String> myTestList;
String listName;
public String ListName
{
get { return listName; }
set { listName = value; }
}
public List<String> MyTestList
{
get { return myTestList; }
set { myTestList = value; }
}
public QCLists(TDAPIOLELib.List List,String name)
{
_fieldList = List;
myTestList = new List<String>();
listName = name;
}
public TDAPIOLELib.List FieldList
{
get
{
return _fieldList;
}
set
{
_fieldList = value;
OnPropertyChanged("FieldList");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
对于上面的 xaml 背后的代码:
DataContext = new TestableItemViewModel();
这些是我使用的课程。正如您在我的 xaml 中看到的那样,第一个 combocox 绑定到所需列表,我可以看到我预期的值。我如何继续绑定其他组合框?因为我只有一个 TestableItemViewModel 实例,它已经绑定到第一个列表,并且数据上下文正在使用该列表。我还有其他需要绑定到其他控件的列表(实际上是 4 个)。当然,我使用查询来获取所需列表,但这是另一个问题,因为列表名称可以在任何给定时间更改。现在我只需要解决 5 绑定的问题。