gpt4 book ai didi

mvvm - 在ViewModel上使用ObservableAsPropertyHelper和this.WhenAny的正确方法

转载 作者:行者123 更新时间:2023-12-03 10:28:07 24 4
gpt4 key购买 nike

说我有一个素描本菜单。它具有一个带有3个切换按钮的工具栏:铅笔,钢笔,橡皮擦。任何时候都只能选择3种工具中的一种,并且没有选择的工具也是合法选项。

我的VM支持需要跟踪所选状态。可观察性是一大优势,因为其他虚拟机也需要知道状态。我想我想使用一个枚举。有影响的东西

enum SelectedTool
{
None=0,
Pencil,
Pen,
Eraser
}

我试图找出使用ReactiveObject设置此VM的最佳方法。我认为SelectedTool状态变量应该是只读的,并在选择工具时设置(应该是ObservableAsPropertyHelper吗?)。我还希望枚举的初始状态为“无”。我也不确定每个按钮是否应该具有bool ReactiveProperty或不支持。如果存在这些笨拙的支持,那么我将必须在VM中保持状态一致,这可能会很痛苦,因为添加了更多工具。我想知道是否有一种方法可以在 bool 上使用WhenAny来设置适当的状态。

谢谢

最佳答案

I think that the SelectedTool state variable should be readonly and set upon the tool selection (should this be ObservableAsPropertyHelper?)



实际上,我将以相反的方式进行操作-作为枚举的SelectedTool应该是Truth™的来源,并且按钮状态可以反射(reflect)出来。
var pencilToggled = this.WhenAnyValue(x => x.SelectedTool == SelectedTool.Pencil);

// We can only toggle Pencil when it's not currently toggled
var togglePencil = ReactiveCommand.Create(pencilToggled.Select(x => x != true));
togglePencil.Subscribe(_ => this.SelectedTool =
(this.SelectedTool == SelectedTool.Pencil ? SelectedTool.None : SelectedTool.Pencil));

您可能会变得非常聪明,并使用四个命令+ Merge + ToProperty使其完全正常运行,但是imho并不会带来太多好处。

关于mvvm - 在ViewModel上使用ObservableAsPropertyHelper和this.WhenAny的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27624667/

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