如何绑定到ViewModel中的ListBox

时间:2013-10-01 20:16:50

标签: c# wpf mvvm listbox

以下是此交易:我必须从SelectedItem获取Listbox,我从this question获取并将其添加到另一个UserControl中的ListBox。 ViewModel和模型都是设置的,我只需要知道如何引用获取项目的ListBox。

这将在ViewModel A下 - ViewModel,它使用接收项目的ListBox控制用户控件。

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

我不明白如何获得ListBoxA。

它是ObservableCollection的{​​{1}}吗?

有关进一步说明:由ViewModelA控制的ListBoxA将从ViewModelB中的ListBoxB接收值。我在ViewModelA中为ViewModelB添加了一个属性

1 个答案:

答案 0 :(得分:1)

您需要在ViewModelA中拥有一个属性,该属性可以是实现IEnumerable的任何类型。我将使用一个列表:

    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,并在Add Command上填写

MyList.Add(ViewModelB.myString);  

ViewModelB.myString假设您在上一个问题中在ViewModelB中有一个属性myString绑定到ListBoxB的SelectedItem,并且您在ViewModelA中有一个ViewModelB实例的引用。

这应该这样做,让我知道

更新

您应该在VMA中使用ObservableCollection,因为该集合将被添加到。