我有以下视图模型类(基于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()
的第一次呼叫?
答案 0 :(得分:0)
这是一个微妙的错误。 ToProperty是 lazy ,这意味着它不会开始订阅,直到设置了XAML绑定(即 之后调用SomeList)。你应该能够通过写:
来解决这个问题 SomeList.CountChanged.StartWith(SomeList.Count).ToProperty(this, x => x.Count, 100);