0

我是一名 C++ 开发人员,最近开始学习 WPF。我正在开发一个使用 MVVM 的 wpf 应用程序。我有组合框,我需要在其中添加项目。尽管我通常使用 ComboboxPropertyName.Add("") 在其中添加项目,但我正在寻找一种有效的方法来添加项目而无需太多代码长度。这是代码:

XAML:

<ComboBox Height="23" ItemsSource="{Binding BoardBoxList}" SelectedItem="{Binding SelectedBoardBoxList, Mode=TwoWay}" SelectedIndex="0" Name="comboBox2" />

视图模型类:

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吗?

请帮忙 :)

4

4 回答 4

1

您可以使用 ObservableCollection 的构造函数,该构造函数可以使用可枚举作为起始集。

new ObservableCollection<string>(boards);

板必须是字符串而不是字符的集合。

编辑:

var boards = new[]{ "S1010012" ,   // redhook
                   "S1010018",   // bavaria
                   "S1010020"    // flying dog
                  } 
于 2012-10-29T08:29:22.003 回答
0

应该没有什么可以阻止您在 C# 中使用相同的循环将项目添加到可观察集合中,ComboBox它将自动更新。除非你对你的问题更具体,否则没有什么可说的。

ItemsSource属性的目标是您不必ComboBox通过循环强制将项目添加到自身,而只需指定一个集合,控件将处理其余的,如果您的业务项目如何进入集合。

于 2012-10-29T08:28:40.297 回答
0

如果我理解正确,你可以使用类AddRange的方法List

您可以创建列表(添加使用 AddRange - 用于添加、for 循环等),然后基于该列表创建 Observable Collection。

ObservableCollection<string> collection 
                 = new ObservableCollection<string>(myList);

如果你需要它(更新),你可以将 observable 绑定到ItemSource,否则你可以绑定列表。

于 2012-10-29T08:29:09.257 回答
0

使用ComboBox'ItemsSource属性。如果您使用 anObservableCollection作为源,您可能会忘记手动更新项目而只使用视图模型中的列表。

于 2012-10-29T08:29:33.970 回答