gpt4 book ai didi

c# - ReactiveUI,导航到时从 View 模型获取列表 - 如果 View 模型实现接口(interface)

转载 作者:太空宇宙 更新时间:2023-11-03 10:51:01 25 4
gpt4 key购买 nike

我正在使用 ReactiveUI 及其路由器。

我的一些 IRoutableViewModel s 实现了一个接口(interface) IHaveCommands ,它有一个属性 IEnumerable<IReactiveCommand> Commands { get; }

所以,我想要的是我的 IScreen 中当前 View 模型的命令列表实现,AppBootstrapper .

什么是“正确”的实现方式?

我有点让它可以与以下代码一起工作,但我的直觉告诉我还有其他更好的方法....

public class AppBootstrapper :  ReactiveObject, IScreen
{
public IRoutingState Router { get; private set; }

public AppBootstrapper(IMutableDependencyResolver dependencyResolver = null, IRoutingState testRouter = null)
{
Router = testRouter ?? new RoutingState();

Router.CurrentViewModel.Where(x => x != null)
.Select(x => typeof(IHaveCommands).IsAssignableFrom(x.GetType()) ? ((IHaveCommands)x).Commands : null)
.ToProperty(this, x => x.Commands, out _toolbarCommands);

...
}

readonly ObservableAsPropertyHelper<IEnumerable<CommandSpec>> _toolbarCommands;
public IEnumerable<CommandSpec> ToolbarCommands { get { return _toolbarCommands.Value; } }

}

有什么建议吗?

最佳答案

这对我来说太棒了!除了一些可能的小的可读性修正之外,这是你应该做的™。这是一个稍微干净的版本:

Router.CurrentViewModel
.Select(x => {
var haveCmds = x as IHaveCommands;
return haveCmds != null ? haveCmds.Commands : null;
})
.ToProperty(this, x => x.Commands, out _toolbarCommands);

关于c# - ReactiveUI,导航到时从 View 模型获取列表 - 如果 View 模型实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21419102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com