gpt4 book ai didi

dynamic-data - Observable ChangeSet 等待列表准备好后再观看

转载 作者:行者123 更新时间:2023-12-03 08:48:38 26 4
gpt4 key购买 nike

我们有一个列表页面,我们可以使用 <switch /> 启用或禁用事物™该事物™通过 IsActive 标志进行切换

public class Thing
{
/* ... */
[Reactive] public bool IsActive { get; set; }
}

鉴于以下更改监听器,想法是当 IsActive属性更改(切换开关上的用户交互),我们调用 _saveItemCommand使用新的 IsActiveState 保存实体.

public ObservableCollection<Thing> DataObjectList {get;} = new ObservableCollection<Thing>();

public MyClass()
{
_saveItemCommand = ReactiveCommand.CreateFromTask(SaveItemInternal);
_listWatcher = DataObjectList
.ToObservableChangeSet()
.AsObservableList()
.Connect()
.WhenPropertyChanged(x => x.IsActive)
.Throttle(TimeSpan.FromMilliseconds(250))
.ObserveOn(RxApp.MainThreadScheduler)
.Select(x => x.Sender)
.InvokeCommand(_saveItemCommand);
}

public void OnNavigatingTo()
{
var newItems = _myService.GetNewItems();
DataObjectList.AddRange(newItems);
}

public void OnDestroy()
{
_listWatcher?.Dispose();
}

我遇到的问题是,当我设置列表时,该命令似乎是在 AddRange 之后立即在列表中的最后一项上调用的。被调用。

我尝试过使用.Skip(1)没有任何运气,但有一件事似乎有效但很难看是 .Skip(DataObjectList.Length)

如何才能使该命令在用户第一次切换开关之前不会被调用?设置此监听器的正确方法是什么?

最佳答案

您很可能需要添加一个 Where 语句来指示它只能在 IsActivated 开关上调用。

    _listWatcher = DataObjectList
.ToObservableChangeSet()
.AsObservableList()
.Connect()
.WhenPropertyChanged(x => x.IsActive)
.Throttle(TimeSpan.FromMilliseconds(250))
.ToCollection()
.Where(x => x.Any(value => value.IsActive))
.ObserveOn(RxApp.MainThreadScheduler)
.Select(x => x.Sender)
.InvokeCommand(_saveItemCommand);

所以我添加的两行是

        .ToCollection()
.Where(x => x.Any(value => value.IsActive))

ToCollection() 会将其转换为可观察列表,Where 将限制您的可观察到 IsActive 发生变化时值。

如果您希望在 Where() 调用之后仅发生一次 FirstAsync() 调用,您可能希望添加一个 FirstAsync() 调用。

关于dynamic-data - Observable ChangeSet 等待列表准备好后再观看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60330908/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com