RxUI ObservableAsPropertyHelper不适用于XAML绑定

时间:2015-01-28 23:40:05

标签: c# wpf xaml binding reactiveui

我有以下视图模型类(基于RxUI design guidelines):

public class SomeViewModel : ReactiveObject
{
    private readonly ObservableAsPropertyHelper<int> m_count;

    public ReactiveCommand<object> AddItem { get; set; }

    public int Count
    {
        get { return m_count.Value; }
    }

    public IReactiveList<string> SomeList { get; private set; }

    public SomeViewModel ()
    {
        SomeList = new ReactiveList<string>();

        AddItem = ReactiveCommand.Create();
        AddItem.Subscribe(x => SomeList.Add("new item"));

        m_count = SomeList.CountChanged.ToProperty(this, x => x.Count, 100);

        SomeList.Add("first item");
    }
}

以下XAML绑定:

<Button Command="{Binding AddItem}" Content="{Binding Count}" />

当我的视图显示时,按钮内容为100而不是1.然后,当单击该按钮时,内容将更新为2,然后是3,然后是4,等等。

为什么没有观察到SomeList.Add()的第一次呼叫?

1 个答案:

答案 0 :(得分:0)

这是一个微妙的错误。 ToProperty是 lazy ,这意味着它不会开始订阅,直到设置了XAML绑定(即 之后调用SomeList)。你应该能够通过写:

来解决这个问题
 SomeList.CountChanged.StartWith(SomeList.Count).ToProperty(this, x => x.Count, 100);