我试图将ReactiveList子类化,以便它响应我编写的ReactiveDictionary中的更改,而不是父列表。
这是ReactiveList子类的类和构造函数签名。
public class ReactiveDictionaryDerivedList<TKey, TValue, TDerived> : ReactiveList<TDerived>, IReactiveDerivedList<TDerived>
{
public ReactiveDictionaryDerivedList(
IReadOnlyReactiveDictionary<TKey, TValue> dict,
Func<TValue, TDerived> selector,
Func<TValue, TDerived, bool> derivedValueFinder,
IScheduler scheduler)
{
}
以下是我在项目中的依赖项。请注意,我使用的是System.Reactive的4.0.0预览版本,因为它是由ReactiveUI 8.0.0 alpha安装的。 (我使用ReactiveUI alpha,因为这似乎是what is recommended these days)
<packages>
<package id="ReactiveUI" version="8.0.0-alpha0113" targetFramework="net452" />
<package id="ReactiveUI.WPF" version="8.0.0-alpha0113" targetFramework="net452" />
<package id="Splat" version="2.0.0" targetFramework="net452" />
<package id="System.Reactive" version="4.0.0-preview00001" targetFramework="net452" />
</packages>
问题是由于错误,该类没有编译:
error CS0012: The type 'IScheduler' is defined in an assembly that is not referenced.
You must add a reference to assembly 'System.Reactive.Interfaces, Version=3.0.1000.0,
Culture=neutral, PublicKeyToken=94bc3704cddfc263'.
任何想法如何解决将不胜感激。对ReactiveUI和System.Reactive推荐版本的建议也不错。
答案 0 :(得分:4)
在我的WPF应用程序中,我必须使用版本4.0.0-preview00001(Core,Interfaces,Linq,PlatformServices,Windows.Threading,Windows.Forms)安装System.Reactive.XXXXX软件包。
所有这些软件包都附带System.Reactive.Compatibility
包(nuget link):
用于启用v3应用的Reactive Extensions(Rx)兼容性库 使用v4
您应该尝试在项目中使用它。
答案 1 :(得分:2)
不幸的是,目前依赖性正在发生。但对于当前的8.0版本,建议安装System.Reactive 3.1。这是唯一一个经过测试的8.0版本。
如果您开始为项目使用PackageReference,则不需要自己定义System.Reactive依赖项,但是它会被程序包管理器选中。但是这可能对WPF无效(但是?)。
请参阅:https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files