0

交易是这样的:我必须SelectedItem从 a 中获取 a Listbox,我从这个问题中得到,并将其添加到ListBox另一个 UserControl 中的 a 中。ViewModels 和模型都设置好了,我只需要知道如何引用获取项目的 ListBox。

这将在 ViewModel A 下——该 ViewModel 使用接收项目的 ListBox 控制用户控件。

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

我不明白如何获取 ListBoxA。

它会是一个ObservableCollectionstrings

进一步说明:由 ViewModelA 控制的 ListBoxA 将从 ViewModelB 中的 ListBoxB 接收值。我在 ViewModelA 中包含了 ViewModelB 的属性

4

1 回答 1

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,然后在添加命令上,您要放置

MyList.Add(ViewModelB.myString);  

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

这应该可以,让我知道

更新:

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

于 2013-10-01T21:12:44.780 回答