以下是此交易:我必须从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添加了一个属性
答案 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,因为该集合将被添加到。