简单的 ReactiveUI 对象 属性 不触发

Simple ReactiveUI object property don't fire

我是 ReactiveUI 的新手,我正在尝试制作一个具有反应属性的简单反应对象。 设置 属性 后,我无法收到通知。 这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ReactiveUI;
using System.Windows.Media.Media3D;

namespace SUReactiveUITest
{
    public class MyRepository : ReactiveObject
    {
        Point3D _SyncPoint;
        public Point3D SyncPoint
        {
            get { return _SyncPoint; }
            set
            {
                _SyncPoint = value;
                this.RaiseAndSetIfChanged(ref _SyncPoint, value);
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Program program = new Program();
        }

        MyRepository repo = new MyRepository();
        Program()
        {
            repo.WhenAnyValue(x => x.SyncPoint).Subscribe(OnNewSyncPoint);
            repo.SyncPoint = new Point3D(1, 2, 3);
            repo.SyncPoint = new Point3D(10, 20, 30);
        }

        void OnNewSyncPoint(Point3D p)
        {
            System.Console.WriteLine("My point NEW value: {0}", p);
        }
    }
}

我期待 OnNewSyncPoint() 被调用,输出应该是:
我的观点 NEW 值:1,2,3
我的点 NEW 值:10,20,30
但是没有打印任何内容:(

肯尼当之无愧。他是正确的,RaiseAndSetIfChanged 将直接设置值,因此您不需要 _SyncPoint = value;

感谢@kenny 的回答。这是它的文档:
来自 ReactiveUI documentation:

读写属性

参与更改通知的属性(即更改时发出的信号)按以下​​方式编写:

string name;
public string Name {
    get { return name; }
    set { this.RaiseAndSetIfChanged(ref name, value); }
}

请注意,与其他框架不同,它们总是这样编写,使用完全相同的样板代码。如果您试图在 setter 中放置任何内容,您几乎可以肯定做错了,而应该改用 WhenAny 和 ToProperty。