我们对ReactiveUI还比较陌生,这可能是我们在使一个视图模型时遇到问题的原因。
在我们的视图模型中,我们有一份ReactiveList列表,其中包含一个类,该类中有一个“selected”的属性。
在视图模型中,我们想要一个“AnySelected”属性,如果列表中至少有1个项目被标记为选定,则AnySelected为true。
我们在努力解决此问题。
作为一个小型的测试应用程序,我们尝试了一些字符串,在变化发生时的信息没有出现。
我们做错了什么?
在我们的视图模型中,我们有一份ReactiveList列表,其中包含一个类,该类中有一个“selected”的属性。
在视图模型中,我们想要一个“AnySelected”属性,如果列表中至少有1个项目被标记为选定,则AnySelected为true。
我们在努力解决此问题。
作为一个小型的测试应用程序,我们尝试了一些字符串,在变化发生时的信息没有出现。
public class TestRx : ReactiveObject
{
private ReactiveList<string> mySelectedItems;
public ReactiveList<string> MySelectedItems
{
get { return mySelectedItems; }
set { this.RaiseAndSetIfChanged(ref mySelectedItems, value); }
}
public TestRx()
{
var firstList = new ReactiveList<string>();
var t = this.WhenAnyValue(x => x.MySelectedItems);
var t1 = t.Select(x => x ?? new ReactiveList<string>());
var changed = t1.Select(x => x.Changed.Select(_ => Unit.Default));
var itemChanged = t1.Select(x => x.ItemChanged.Select(_ => Unit.Default));
var countChanged = t1.Select(x => x.CountChanged.Select(_ => Unit.Default));
t.Subscribe(x => Debug.WriteLine("T HAS CHANGED {0}", x == firstList));
t1.Subscribe(z => Debug.WriteLine("T1 Changed {0}", z == firstList));
changed.Subscribe(x => Debug.WriteLine("Changed :"));
itemChanged.Subscribe(x => Debug.WriteLine("Item Changed :"));
var replacementList = new ReactiveList<SelItem>(new[] {
new SelItem() { Selected = false }
});
Debug.WriteLine("***********************Assign 1st list");
MySelectedItems = firstList;
Thread.Sleep(100);
Debug.WriteLine("***********************Adding item 2 list");
MySelectedItems.Add("a new string");
// we don't get any debug messages as a result of the above
Thread.Sleep(100);
Debug.WriteLine("***********************Assign null");
MySelectedItems = null;
Thread.Sleep(100);
}
}
我们做错了什么?