Caliburn Micro + RowDetailsTemplate:详细信息视图消失

Posted

技术标签:

【中文标题】Caliburn Micro + RowDetailsTemplate:详细信息视图消失【英文标题】:CaliburnMicro + RowDetailsTemplate: Details-View disappears 【发布时间】:2017-12-31 07:48:10 【问题描述】:

我有一个列出我所有产品的 GridView。第一列是“GridViewToggleRowDetailsColumn”,单击时展开详细信息视图。

我使用 CaliburnMicro 来加载详细信息视图,如下所示:

 <telerik:RadGridView ItemsSource="Binding Products.View"
                             SelectedItem="Binding SelectedProduct,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged"
                             AutoGenerateColumns="False"                                 
                             EnableRowVirtualization="False"
                             ShowGroupPanel="False"
                             RowDetailsVisibilityMode="Collapsed"
                             RowIndicatorVisibility="Collapsed"
                             cal:Message.Attach="[Event RowDetailsVisibilityChanged] = 
[Action OnRowDetailsVisibilityChanged($eventArgs)]">

<telerik:RadGridView.RowDetailsTemplate>
  <DataTemplate>  
    <ContentControl cal:View.Model="Binding DataContext.ProductDetailsViewModel, RelativeSource=RelativeSource FindAncestor, AncestorType=telerik:RadGridView" />
  </DataTemplate>
</telerik:RadGridView.RowDetailsTemplate>
   <telerik:GridViewToggleRowDetailsColumn />

    ...Columndefinitions...

</telerik:RadGridView>

只要我停留在同一个产品上,我就可以打开和关闭详细信息。如果我打开详细信息而另一个详细信息已经可见,则会出现问题。然后第一个细节消失了,再也没有回来。看截图:

灰色框是详细信息的占位符。我依次打开了前8项的详细信息,但只显示了最后一项。我的猜测是 Caliburn Micro 无法再找到 View,但我不知道为什么?因为我只有一个 ProductDetailsViewModel?

另外:在调试模式下,我注意到“ProductDetailsViewModel”-getter 在展开行后每个项目仅访问一次。折叠和展开同一行不会再次访问 getter。

更新: 另一种方法,同样的效果:我说我的 ItemsSource 是 ProductDetailsViewModel 的集合,并从 Conductor&lt;ProductDetailsViewModel>.Collection.OneActive 继承我的 MainViewModel,使 Grid 绑定与

ItemsSource = "Binding Items"

在 xaml 中

<ContentControl cal:View.Model="Binding DataContext.ActiveItem, RelativeSource=RelativeSource FindAncestor, AncestorType=telerik:RadGridView" />

在我所做的 SelectionChanged 中

ActivateItem(e.Row.Item as ProductDetailsViewModel);

和以前一样,ProductDetailsView 显示当前项目,但一旦我显示另一个产品的详细信息就会消失。

【问题讨论】:

【参考方案1】:

问题在于“IViewAware”的视图缓存,它是由屏幕自动实现的。覆盖 ProductDetailsViewModel 中的“GetView”解决了这个问题。

相关:Screens shared in multiple screens disappear after deactivation in Caliburn.Micro

【讨论】:

仍然不是最终解决方案,因为“旧”视图不会被清理

以上是关于Caliburn Micro + RowDetailsTemplate:详细信息视图消失的主要内容,如果未能解决你的问题,请参考以下文章

WPF MVVM(Caliburn.Micro+Metro)-配置Caliburn.Micro

Caliburn.Micro学习笔记目录——li-peng

使用 Caliburn.Micro 附加到多个事件

Caliburn.Micro框架之Action Convertions

caliburn.micro 在 Release 目录中生成的文件

来自用户控制的 Caliburn.Micro 导航对 ShellViewModel