使用ReactiveUI 6.5,我尝试使用RxUI的CreateDerivedCollection功能实现类似SelectMany LINQ表达式的功能。我的源集合中的对象(类型' A')具有IsSelected
属性,以及其他项目属于&#39; B&#39;的集合属性。我希望最终得到一个IReactiveDerivedList<B>
,它是所选A中所有B对象的扁平列表。希望这是有道理的。
为了使其更加具体,让我们使用应用程序的示例来浏览日志文件。假设我们有一个LogFileViewModel
类型,我们的主屏幕视图模型有一个列表。列表中的每个实例代表系统上的日志文件,我们提供用户可以选择的这些列表。它是一个多选列表,因此他们可以一次选择多个。
LogFileViewModel
则具有IsSelected
布尔属性,当用户选择或取消选择列表中的相应项时,该属性将设置为true / false。它有一个List<LogEntry>
的属性。每个LogEntry
对象当然代表相应日志文件中的一个条目。
我想要做的是在主视图模型中有一个反应列表,它是所有当前所选LogEntry
个对象的所有LogFileViewModel
个对象的列表。所选日志文件的ReactiveList很简单,但我仍然坚持第二部分。以下是主视图模型的基本外观:
public class MainViewModel
{
public MainViewModel()
{
//This gets initialized with the log files somehow, doesn't matter
LogFiles = new List<LogFileViewModel(...);
SelectedLogFiles = LogFiles.CreateDerivedCollection(l => l, l => l.IsSelected);
SelectedLogFileEntries = ? //How to create this one?
}
public List<LogFileViewModel> LogFiles { get; private set; }
public IReactiveDerivedList<LogFileViewModel> SelectedLogFiles { get; private set; }
public IReactiveDerivedList<LogEntry> SelectedLogFileEntries { get; private set; }
}
有没有一种已知的方法可以做到这一点,我只是没有看到?如果没有,任何聪明的想法来实现这种行为? : - )
修改: 看起来我在初始搜索中错过了this question。保罗提供了聪明的&#34;解决这个问题大约2年前。所以我现在的问题是......这仍然是实现这种行为的最佳方式吗?