1

我有一个嵌套控件 (NC1),其中包含 3 个 NC2 实例。首次打开包含视图时,NC1 将为空,因此 NC2 的三个实例将为空。根据通过我的代码和框架进行的调试,这似乎可以正常工作。

当在包含视图中进行选择时,NC1 被正确设置(并且 ViewModel 被(重新)创建)并且其属性的值(通过 Fody.Expose 公开)出现在视图中。但是,NC2 的任何 ViewModel 都没有(重新)创建,它们不反映各自模型提供的值。

如果不上传大量内容,我不确定要提供哪些信息,所以我会尝试一下。

在 NC1 视图中,我有以下内容

<localViews:NC2 DataContext="NC2Entry1"/>
<localViews:NC2 DataContext="NC2Entry2"/>
<localViews:NC2 DataContext="NC2Entry3"/>

NC2EntryX 是 NC1 ViewModel 上的属性,它从列表中返回 NC2 模型的特定实例。NC2EntryX 属性未使用 RegisterProperty 注册。

作为说明,我发现我必须为 NC1 和 NC2 视图模型提供一个空参数构造函数。如果我不这样做,那么当 TypeFactory 尝试使用 Activator 而不是使用注入路径创建 ViewModel 时,我会在创建视图模型时收到 MissingMethod 异常。未使用注入路径,因为 TypeFactory 的第 591 行调用返回 false,因为传递的 NC2 模型“未注册”。(不确定是否应该或如何做到这一点。)

我正在使用 Catel 版本 3.9.0

4

1 回答 1

1

NC2EntryX 属性更改必须以某种方式反映到视图中。您可以通过将其设为 Catel 属性,或者在设置属性值时自己调用 RaisePropertyChanged("NC2EntryX") 来完成此操作。只有在这种情况下,视图才会更新(这只是标准的 WPF / MVVM 行为)。

关于缺少方法异常:这是第一次机会异常,TypeFactory 在无法使用依赖注入创建类型时尝试回退到 Activator.CreateInstance。无需担心这一点。如果您不希望视图模型在没有模型的情况下仍然存在,请不要创建空的构造函数。

于 2014-03-04T09:43:10.933 回答