我有一个列出我所有产品的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>
只要我停留在同一产品上,我就可以打开和关闭细节。如果我打开详细信息而其他详细信息已经可见,则会出现此问题。然后第一个细节消失,永远不会回来。看截图:
灰色框是详细信息的占位符。我一个接一个地打开了前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会显示当前项目,但在我显示其他产品的详细信息后会消失。
答案 0 :(得分:1)
问题是&#34; IViewAware&#34;的视图缓存,它由屏幕自动实现。覆盖&#34; GetView&#34;在ProductDetailsViewModel中解决了这个问题。
相关:Screens shared in multiple screens disappear after deactivation in Caliburn.Micro