CaliburnMicro + RowDetailsTemplate:详细信息 - 视图消失

时间:2017-07-25 11:48:32

标签: c# wpf telerik caliburn.micro rowdetailstemplate

我有一个列出我所有产品的GridView。第一列是“GridViewToggleRowDetailsColumn”,它在单击时展开Details-View。

我使用CaliburnMicro加载Details-View,如下所示:

 <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>

只要我停留在同一产品上,我就可以打开和关闭细节。如果我打开详细信息而其他详细信息已经可见,则会出现此问题。然后第一个细节消失,永远不会回来。看截图: Image

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

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

更新: 另一种方法,效果相同:我说我的ItemsSource是ProductDetailsViewModel的集合,并从Conductor <ProductDetailsViewModel&gt; .Collection.OneActive继承我的MainViewModel,使网格绑定

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 个答案:

答案 0 :(得分:1)

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

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