我在生产中使用它,到目前为止,RxUI 一直非常稳定。该应用程序存在稳定性问题,其中一些与 EMS 有关,另一些与 UnhandledException 处理程序有关,该处理程序导致的问题比它解决的问题多,但我对应用程序的 ReactiveUI 部分没有任何问题。但是,我遇到了关于 ObservableForProperty 根本没有触发的问题,我可能使用不正确并且在我的测试代码以及运行时的 UI 中始终(错误地)工作。
-1。Paul 解释说 _Upper 是由于使用反射来获取班级中的私有字段。您可以使用如下块来处理 StyleCop 和 Resharper 消息,这很容易生成(来自 Resharper SmartTag)
/// <summary>The xxx view model.</summary>
public class XXXViewModel : ReactiveObject
{
#pragma warning disable 0649
// ReSharper disable InconsistentNaming
[SuppressMessage("StyleCop.CSharp.NamingRules",
"SA1306:FieldNamesMustBeginWithLowerCaseLetter",
Justification = "Reviewed. ReactiveUI field.")]
private readonly bool _IsRunning;
[SuppressMessage("StyleCop.CSharp.NamingRules",
"SA1306:FieldNamesMustBeginWithLowerCaseLetter",
Justification = "Reviewed. ReactiveUI field.")]
private string _Name;
....
或从完整更改您的属性
/// <summary>Gets or sets a value indicating whether is selected.</summary>
public bool IsSelected
{
get { return _IsSelected; }
set { this.RaiseAndSetIfChanged(x => x.IsSelected, value); }
}
到它的组成部分,如
/// <summary>Gets or sets a value indicating whether is selected.</summary>
public bool IsSelected
{
get { return _isSelected; }
set
{
if (_isSelected != value)
{
this.RaisePropertyChanging(x => x.IsSelected);
_isSelected = value;
this.RaisPropertyChanged(x=>x.IsSelected);
}
}
}
这种模式在您实际上不提供“简单”属性访问器的情况下也很有用,但可能需要更派生的变体,其中设置一个值会影响多个其他值。
-2。是的,文档并不理想,但我发现在 Rx 之后,获取 RxUI 样本非常容易。我还注意到,从 2->4 的跳跃似乎都伴随着支持 Windows 8/Windows 8 Phone 的更改,并且为 Windows Store App 选择了 ReactiveUI,那么 DotNet 4.5 支持非常好。即使用 [CallerName] 现在意味着您只需 this.RaiseAndSetIFChanged(value) 不需要表达式。
-3。由于我没有选择使用它,因此我没有关于日志记录方面的任何反馈。
-4。我也没有与其他框架混合和匹配。
在http://blog.paulbetts.org/index.php/2012/12/16/reactiveui-4-2-is-released/上还有一个 ReactiveUI 4.2 的其他贡献者列表,包括 Phil Haack。