【发布时间】:2017-10-03 21:59:48
【问题描述】:
我正在使用 DataGridView 创建一个 WinForms 应用程序。 DataSource 是一个 ReactiveList。但是,向列表中添加新项目不会更新 UI。
视图模型
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; }
}
查看
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; }
}
}
- 视图始终显示“John”。
- 调试订阅显示添加的项目。
- 用 ObservableCollection 尝试了相同的结果。How to use ReactiveList so UI is updated when new items are added
- 用 IReactiveDerivedList 尝试了相同的结果。 Does ReactiveUI RaiseAndSetIfChanged fire for List<T> Add, Delete, Modify?
【问题讨论】:
-
你的命令可以简化 btw.. 喜欢 AddCmd = ReactiveCommand.Create(() => Models.Add(.....));
标签: winforms reactiveui