用于嵌套控件的ViewModel未在Catel MVVM for WPF中刷新

时间:2014-03-03 17:16:03

标签: catel

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

当在包含视图中进行选择时,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

1 个答案:

答案 0 :(得分:1)

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

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