0

これが取り引きです:私はこの質問SelectedItemから得た aから aListboxを取得し、それを別の UserControlの a に追加する必要があります。ViewModels とモデルはすべてセットアップされています。項目を取得している ListBox を参照する方法を知る必要があるだけです。ListBox

これは、ViewModel A の下にあります。これは、アイテムを受け取る ListBox でユーザー コントロールを制御する ViewModel です。

//This is located in ViewModelA
private void buttonClick_Command()
{
    //ListBoxA.Items.Add(ViewModelB -> SelectedListItem);
}

ListBoxA の取得方法がわかりません。

それObservableCollectionはのstringsですか?

さらに明確にするために、ViewModelA によって制御される ListBoxA は、ViewModelB の ListBoxB から値を受け取ります。ViewModelA に ViewModelB のプロパティを含めました

4

1 に答える 1

1

IEnumerable を実装する任意の型にできる ViewModelA のプロパティが必要です。リストを使用します:

    public const string MyListPropertyName = "MyList";

    private List<string> _myList;

    /// <summary>
    /// Sets and gets the MyList property.
    /// Changes to that property's value raise the PropertyChanged event. 
    /// </summary>
    public List<string> MyList
    {
        get
        {
            return _myList;
        }

        set
        {
            if (_myList == value)
            {
                return;
            }

            RaisePropertyChanging(MyListPropertyName);
            _myList = value;
            RaisePropertyChanged(MyListPropertyName);
        }
    }

次に、リストボックスで、ItemsSource をこのリストに設定する必要があります

<ListBox ItemsSource="{Binding MyList}">
    .......
</ListBox>

コンストラクターで、表示するデータを MyList に入力し、追加コマンドで、

MyList.Add(ViewModelB.myString);  

ViewModelB.myString 前の質問から、ViewModelB に ListBoxB の SelectedItem にバインドされたプロパティ myString があり、ViewModelA に ViewModelB のインスタンスへの参照があると仮定します。

これでうまくいくはずです、教えてください

アップデート:

コレクションが追加されるため、VMA で ObservableCollection を使用する必要があります。

于 2013-10-01T21:12:44.780 に答える