我有一个列出我所有产品的 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 <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,但一旦我显示另一个产品的详细信息,它就会消失。