0

私は C++ 開発者で、最近 WPF の学習を開始しました。私はMVVMを使用しているwpfアプリに取り組んでいます。コンボボックスがあり、そこにアイテムを追加する必要があります。私は通常 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("....");場合、多くの .Add を使用する必要があります。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);

ItemSourceまた、必要に応じて(更新)、オブザーバブルを にバインドできます。それ以外の場合は、リストをバインドできます。

于 2012-10-29T08:29:09.257 に答える
0

ComboBoxItemsSourceプロパティを使用します。をソースとして使用するObservableCollectionと、項目を手動で更新することを忘れて、ビュー モデルでリストを操作するだけでかまいません。

于 2012-10-29T08:29:33.970 に答える