ReactiveUI选择多种形式的CreateDerivedCollection

时间:2015-08-19 15:57:32

标签: c# reactiveui

使用ReactiveUI 6.5,我尝试使用RxUI的CreateDerivedCollection功能实现类似SelectMany LINQ表达式的功能。我的源集合中的对象(类型&#39; A&#39;)具有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年前。所以我现在的问题是......这仍然是实现这种行为的最佳方式吗?

0 个答案:

没有答案