Winforms-Reactiveui 6.5绑定到ListBox

时间:2016-05-25 14:59:59

标签: c# winforms mvvm listbox reactiveui

我正在使用ReactiveUI(6.5,迄今为止的最新版本)开发一个使用WinForms测试MVVM模式的小应用程序。我在命令(ReactiveCommand)和属性与TextBoxes之间的一些绑定方面取得了一些进展。 我现在陷入困境,试图将项目的ReactiveList绑定到列表框(我的目的是自动更新列表框,一旦元素添加到列表中,并查看列表框中的新元素)。

这里是代码:

视图模型:

public class PersonViewModel : ReactiveUI.ReactiveObject
{ 
(...) 
public ReactiveList<int> Ids { get; private set; }

    public PersonViewModel ()
        {
            Ids = new ReactiveList<int>();
            (...) 
        }

//The command that adds a new item inside the list
private void AddPerson(int id)
        {
            Ids.Add(id);
        }
}

的MainForm

public partial class MainForm : Form, IViewFor<PersonViewModel>
    {
        public MainForm()
        {
            InitializeComponent();

            ViewModel = new PersonViewModel();
            //PersonsListBox.DataSource = ViewModel.Ids; -> this was an idea, it doesn't work either
            this.WhenActivated(d =>
                {
                    d(this.Bind(ViewModel, x => x.Ids, x => x.PersonsListBox.DataSource)); // Binding attempt, doesn't seem to be working         
                    d(this.BindCommand(ViewModel, x => x.AddPersonCommand, x => x.AddPersonButton)); // Command, it works
                });            
        }

        public PersonViewModel ViewModel { get; set; }

        object IViewFor.ViewModel
        {
            get { return ViewModel; }
            set { ViewModel = (PersonViewModel)value; }
        }
}

有什么想法吗?我的目的是在不同的控件中使用它,这些控件与list(dataGrids,listViews,listBoxes等)一起使用是有意义的,并且希望有一种方法可以实现它,就像使用文本框一样。

1 个答案:

答案 0 :(得分:1)

您应该使用ReactiveBindingList代替ReactiveList