将 CancelableEvent 转换为 RX
Translate CancelableEvent to RX
目前我尝试通过仅从组件发送单向消息来思考响应式扩展方式。但我仍然没有弄清楚如何使用 CancelableEventArgs 实现一些依赖于注册处理程序同步执行到与 rx 一起工作的解决方案的东西。
示例:
public void Delete()
{
var deleteRequest = new DeleteServerRequest(_serverConfigurationMapper.Map(SelectedServer));
_eventStream.Push(deleteRequest);
if (!deleteRequest.Cancel)
_serverConfigurationRepository.Delete(deleteRequest.Server);
}
在另一个 class 中,我在 DeleteServerRequest 上注册并显示提示,以便用户能够取消删除项目。
_eventStream.Of<DeleteServerRequest>().Subscribe(
req =>
req.Cancel = DilaogResult.Yes != MessageBox.Show("Delte Server?",
"Do you want to delete the server?",
MessageBoxButtons.YesNo))
我如何使用 RX 中的一种定向消息来做这样的事情?
PS:
Delete 方法是在 ViewModel 中执行命令,所以我不想将 UI-Framework 代码带入其中。
EventHandler 在控制器中,只应显示和关闭不同的 windows 和对话框。
当然可以,只需将取消移到下游即可。
_eventStream.Of<DeleteServerRequest>()
.Map(req => {
req.Cancel = DialogResult.Yes != MessageBox.Show("Delete Server?",
"Do you want to delete the server?",
MessageBoxButtons.YesNo));
return req;
})
.Filter(x => !x.Cancel)
.Publish().RefCount()
.Subscribe(x => _serverConfigurationRepository.Delete(x.Server));
我个人不是 "merge all events into a single stream" 方法的忠实拥护者,虽然它是有效的,但我会创建一个专门用于删除的流,然后将请求创建也包装在其中。这也将有助于消除在 Observable 运行期间被拉入的副作用。在这种情况下 Delete
看起来像
public void Delete()
{
_deleteStream.Push(SelectedServer);
}
流看起来像:
_deleteStream
.Map(selected => new DeleteServerRequest(_serverConfigurationMapper.Map(selected)))
.Map(req => {
req.Cancel = DialogResult.Yes != MessageBox.Show("Delete Server?",
"Do you want to delete the server?",
MessageBoxButtons.YesNo));
return req;
})
.Filter(x => !x.Cancel)
.Publish().RefCount()
.Subscribe(x => _serverConfigurationRepository.Delete(x.Server));
目前我尝试通过仅从组件发送单向消息来思考响应式扩展方式。但我仍然没有弄清楚如何使用 CancelableEventArgs 实现一些依赖于注册处理程序同步执行到与 rx 一起工作的解决方案的东西。
示例:
public void Delete()
{
var deleteRequest = new DeleteServerRequest(_serverConfigurationMapper.Map(SelectedServer));
_eventStream.Push(deleteRequest);
if (!deleteRequest.Cancel)
_serverConfigurationRepository.Delete(deleteRequest.Server);
}
在另一个 class 中,我在 DeleteServerRequest 上注册并显示提示,以便用户能够取消删除项目。
_eventStream.Of<DeleteServerRequest>().Subscribe(
req =>
req.Cancel = DilaogResult.Yes != MessageBox.Show("Delte Server?",
"Do you want to delete the server?",
MessageBoxButtons.YesNo))
我如何使用 RX 中的一种定向消息来做这样的事情?
PS: Delete 方法是在 ViewModel 中执行命令,所以我不想将 UI-Framework 代码带入其中。 EventHandler 在控制器中,只应显示和关闭不同的 windows 和对话框。
当然可以,只需将取消移到下游即可。
_eventStream.Of<DeleteServerRequest>()
.Map(req => {
req.Cancel = DialogResult.Yes != MessageBox.Show("Delete Server?",
"Do you want to delete the server?",
MessageBoxButtons.YesNo));
return req;
})
.Filter(x => !x.Cancel)
.Publish().RefCount()
.Subscribe(x => _serverConfigurationRepository.Delete(x.Server));
我个人不是 "merge all events into a single stream" 方法的忠实拥护者,虽然它是有效的,但我会创建一个专门用于删除的流,然后将请求创建也包装在其中。这也将有助于消除在 Observable 运行期间被拉入的副作用。在这种情况下 Delete
看起来像
public void Delete()
{
_deleteStream.Push(SelectedServer);
}
流看起来像:
_deleteStream
.Map(selected => new DeleteServerRequest(_serverConfigurationMapper.Map(selected)))
.Map(req => {
req.Cancel = DialogResult.Yes != MessageBox.Show("Delete Server?",
"Do you want to delete the server?",
MessageBoxButtons.YesNo));
return req;
})
.Filter(x => !x.Cancel)
.Publish().RefCount()
.Subscribe(x => _serverConfigurationRepository.Delete(x.Server));