Je crée une application WinForms avec DataGridView. La DataSource est une ReactiveList. L'ajout de nouveaux éléments à la liste ne met cependant pas à jour l'interface utilisateur.Comment utiliser ReactiveList afin que l'interface utilisateur soit mise à jour lorsque des éléments sont ajoutés/supprimés/modifiés
ViewModel
public class HomeViewModel: ReactiveObject
{
public ReactiveCommand<object> AddCmd { get; private set; }
ReactiveList<Model> _models;
public ReactiveList<Model> Models
{
get { return _models; }
set { this.RaiseAndSetIfChanged(ref _models, value); }
}
public HomeViewModel()
{
Models = new ReactiveList<Model>() { new Model { Name = "John" } };
AddCmd = ReactiveCommand.Create();
AddCmd.ObserveOn(RxApp.MainThreadScheduler);
AddCmd.Subscribe(_ =>
{
Models.Add(new Model { Name = "Martha" });
});
}
}
public class Model
{
public string Name { get; set; }
}
Voir
public partial class HomeView : Form, IViewFor<HomeViewModel>
{
public HomeView()
{
InitializeComponent();
VM = new HomeViewModel();
this.OneWayBind(VM, x => x.Models, x => x.gvData.DataSource);
this.BindCommand(VM, x => x.AddCmd, x => x.cmdAdd);
}
public HomeViewModel VM { get; set; }
object IViewFor.ViewModel
{
get { return VM; }
set { VM = (HomeViewModel)value; }
}
HomeViewModel IViewFor<HomeViewModel>.ViewModel
{
get { return VM; }
set { VM = value; }
}
}
- La vue toujours montrer "John".
- Déboguer S'abonner Afficher les éléments ajoutés.
- Essayé avec ObservableCollection même résultat. How to use ReactiveList so UI is updated when new items are added
- Essayé avec IReactiveDerivedList même résultat. Does ReactiveUI RaiseAndSetIfChanged fire for List<T> Add, Delete, Modify?
Vos commandes pourraient être simplifiées entre 0 .. AddCmd = ReactiveCommand.Create (() => Models.Add (.....)); –