- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们是 ReactiveUI 的新手,所以这可以解释为什么我们在让 View 模型工作时遇到一些问题。
在我们的 View 模型中,我们有一个类的 ReactiveList,类中有一个“已选择”。
在 View 模型中,我们希望有一个“AnySelected”属性,这样如果列表中至少有一项标记为选中,则 AnySelected 为真。
我们很难完成这项工作。
作为一个只有字符串的小型测试应用程序,我们已经尝试过了,但是没有出现关于发生变化的消息。
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);
}
}
我们做错了什么?
最佳答案
这是一个常见的模式,但实现起来有点棘手,因为您必须处理以下所有情况:
这是一种方法。这很复杂,这暗示了 future 版本的 RxUI 可以使事情变得更好的地方,但这是您现在可以做的。
IObservable<bool> WhenAnyAreTrue(IEnumerable<ViewModel> currentElements)
{
// NB: 'Unit' here means, we don't care about the actual value, just
// that something changed
var notifyWhenAnySelectedItemChanges = currentElements
.Select(x => x.WhenAny(y => y.Selected, _ => Unit.Default).Skip(1))
.Merge();
return notifyWhenAnySelectedItemChanges
.StartWith(Unit.Default)
.Select(_ => currentElements.Any(x => x.Selected));
}
// Any time MySelectedItems change or when the items in it change,
// create a new WhenAnyAreTrue and switch to it
this.WhenAnyObservable(x => x.MySelectedItems.ItemsChanged)
.Select(_ => WhenAnyAreTrue(MySelectedItems))
.Switch()
.ToProperty(this, x => x.AnySelected, out anySelected);
关于c# - ReactiveList 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24044111/
我们是 ReactiveUI 的新手,所以这可以解释为什么我们在让 View 模型工作时遇到一些问题。 在我们的 View 模型中,我们有一个类的 ReactiveList,类中有一个“已选择”。 在
我已尝试对所有数据使用,但它不起作用,因为我只能获得“大小”参数中规定的结果数。这是我的代码的一部分。 onAllData(shops) { let result = null; if (s
我在 ReactiveLists 中保存了一些检查列表,它们具有 ChangeTrackingEnabled = true。我只想在每个列表中至少选中一个项目时才启用我的 OkCommand。 此外,
我正在创建一个带有列表的 Xamarin.Forms 应用程序。 itemSource 是一个 react 列表。但是,向列表中添加新项目不会更新 UI。这样做的正确方法是什么? 列表定义 _list
我有一个 ViewModel,我想在其中监听两个 ReactiveLists、Payments 和 AccountPayments 中项目的更改。列表被实例化并且 ChangeTrackingEnab
我已经将 ReactiveList Orders 绑定(bind)到 wpf 中的数据网格。我通过以下语法成功获得了单个选定订单 private Order _selectedOrder; publi
使用 ReactiveUI 6.0.0 并拥有 var myReactiveList = new ReactiveList(); // [...] later I subscribe to the l
我见过很多将 ReactiveList 绑定(bind)到 WPF 中的 ComboBox 控件的解决方案,以便控件显示枚举项的描述。所有这些解决方案都在 XAML 中使用标准 TypeConvert
我尝试了许多不同的修改,但没有任何帮助。当我深入研究资源时,它是一堆涉及静态状态的深层魔法,如 ConditionalWeakTable 等。 private readonly ReactiveLis
我在使用 ReactiveUI 绑定(bind) ReactiveList 时遇到问题在我的 ViewModel 到我的 WPF View 中控件的 SelectedItems 属性( Observa
我觉得我的做法是正确的,但我不确定。我正在将对象异步加载到 ViewModel 中的 ReactiveList 中。通过 Xamarin Forms,我已将 List 绑定(bind)到 Xamari
我在 View 中的 ListBox 控件中显示 ReactiveList 的内容时遇到问题。当我尝试通过代码隐藏绑定(bind)(使用 this.OneWayBind(...))来绑定(bind)它
我有一个简单的 ViewModel: public class SampleCollectionViewModel : ReactiveObject { public Samp
我有一个简单的 ViewModel: public class SampleCollectionViewModel : ReactiveObject { public Samp
我是一名优秀的程序员,十分优秀!