我是C ++开发人员,最近开始学习WPF。我正在使用一个wpf应用程序,我正在使用MVVM。我有组合框,我需要在其中添加项目。虽然我通常使用ComboboxPropertyName.Add(“”)来添加项目,但我正在寻找一种有效的方法来添加没有太多代码长度的项目。这是代码:
XAML:
<ComboBox Height="23" ItemsSource="{Binding BoardBoxList}" SelectedItem="{Binding SelectedBoardBoxList, Mode=TwoWay}" SelectedIndex="0" Name="comboBox2" />
ViewModel类:
public ObservableCollection<string> BoardBoxList
{
get { return _BoardBoxList; }
set
{
_BoardBoxList = value;
OnPropertyChanged("BoardBoxList");
}
}
/// <summary>
/// _SelectedBoardBoxList
/// </summary>
private string _SelectedBoardBoxList;
public string SelectedBoardBoxList
{
get { return _SelectedBoardBoxList; }
set
{
_SelectedBoardBoxList = value;
OnPropertyChanged("SelectedBoardBoxList");
}
}
以下是我在C ++中使用组合框添加项目的方法:
static const signed char boards[][9] = {
{}, // left blank to indicate no selection
{ 'S', '1', '0', '1', '0', '0', '1', '2', 0 }, // redhook
{ 'S', '1', '0', '1', '0', '0', '1', '8', 0 }, // bavaria
{ 'S', '1', '0', '1', '0', '0', '2', '0', 0 }, // flying dog
};
m_boardBox = new ComboBox(String::empty);
for(int i = 1; i < 4; i++)
m_boardBox->addItem(String((char*)(boards[i])), i);
m_boardBox->setSelectedId(2); // select Bavaria by default
addAndMakeVisible(m_boardBox);
如果您注意到上述情况,您会发现循环添加项目很容易。这就是我想在我的组合框中添加项目的方法。
如果我使用_BoardBoxList.Add("....");
,我将不得不使用许多.Adds。它们是一种有效的方式,我可以将项目存储在列表/集合中,并以for loop
的形式将它们添加到组合框中,就像上面一样吗?
请帮忙:)
答案 0 :(得分:1)
您可以使用ObservableCollection的构造函数,它可以使用枚举作为起始集。
new ObservableCollection<string>(boards);
董事会必须是字符串的集合而不是字符。
编辑:
var boards = new[]{ "S1010012" , // redhook
"S1010018", // bavaria
"S1010020" // flying dog
}
答案 1 :(得分:0)
在C#中使用相同的循环来向observable集合中添加项目应该没有什么能阻止你,ComboBox
会自动更新。除非你对你的问题更具体,否则没有别的可说的。
ItemsSource
属性的目标是,您不必通过循环强制将项添加到ComboBox
本身,而只是指定一个集合,控件将处理其余的项目,如何处理项目如果您的公司进入该系列。
答案 2 :(得分:0)
如果我理解正确,您可以使用AddRange
类
List
方法
你可以创建列表(添加使用AddRange - 用于添加,for循环等),然后根据该列表创建Observable Collection。
ObservableCollection<string> collection
= new ObservableCollection<string>(myList);
并且你可以将observable绑定到ItemSource
,如果你需要它(更新),否则你可以绑定列表。
答案 3 :(得分:0)
使用ComboBox
的{{1}}媒体资源。如果您使用ItemsSource
作为来源,则可以忘记手动更新项目,只需使用视图模型中的列表。