2016-05-25 11 views
0

Ich entwickle eine kleine App, um MVVM Muster mit WinForms zu testen, mit ReactiveUI (6.5, neueste Version bisher). Ich habe einige Fortschritte gemacht mit Befehlen (ReactiveCommand) und einigen Bindings zwischen Eigenschaften und TextBoxen. Ich habe jetzt versucht, eine ReactiveList von Elementen an eine Listbox zu binden (meine Absicht ist es, die Listbox automatisch zu aktualisieren, sobald ein Element der Liste hinzugefügt wurde und das neue Element in der Listbox angezeigt wird).Winforms-Reactivui 6.5 Bindung an ListBox

Hier ist der Code:

Ansichtsmodell:

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); 
     } 
} 

Main

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; } 
     } 
} 

Irgendwelche Ideen dazu? Ich beabsichtige, es in verschiedenen Steuerelementen zu verwenden, die sinnvollerweise mit Listen (dataGrids, listViews, listBoxes usw.) verwendet werden können, und hoffentlich gibt es eine Methode dafür, genauso wie es mit Textfeldern gemacht wird.

Antwort

0

Sie sollten stattdessen ReactiveBindingListReactiveList verwenden.