为了实现这一点,我使用了TemplateSelector(“GenericLayoutTemplateSelector”)作为xaml中具有不同模板的顶级元素.对于表格布局,我想在代码项目中使用示例“将ListView绑定到数据矩阵”:http://www.codeproject.com/Articles/36462/Binding-a-ListView-to-a-Data-Matrix
codeproject示例工作正常,但是当我在我的上下文中使用它时它会失败.由于我所做的唯一更改是将xaml放在datatemplate / template选择器中,我认为问题可能与此有关.
<DataTemplate x:Key="TableTemplate"> <Border BorderThickness="2" BorderBrush="SteelBlue"> <ListView x:Name="TableLayoutListView" tableLayout:ListViewExtension.MatrixSource="{Binding Converter={StaticResource ListToMatrixConverter}}"> <ListView.View> <GridView> <GridViewColumn displayMemberBinding="{Binding Path=[0]}" Header="Dummy" CellTemplateSelector="{DynamicResource GenericLayoutTemplateSelector}"/> </GridView> </ListView.View> </ListView> </Border> </DataTemplate>
它在ListViewExtension.MatrixSource内部检索到GridView时失败:
private static void OnMatrixSourceChanged(DependencyObject d,DependencyPropertyChangedEventArgs e) { ListView listView = d as ListView; Matrix matrix = e.NewValue as Matrix; listView.ItemsSource = matrix; GridView gridView = listView.View as GridView; DataTemplateSelector cellTemplateSelector = gridView.Columns.First().CellTemplateSelector;
listView.View为null.我可以在Code中创建GridView并将其分配给listView.View但是我无法访问GenericTemplateSelector,我想使用CellTemplateSelector作为GridView.
任何想法为什么listView.View是null我能做些什么呢?
编辑:
SledgeHammer明确表示,我正在努力做的是一个糟糕的黑客,它失败了.正确的方法是将GenericTemplateSelector直接传递给附加属性,而不是通过虚拟GridView列.
我想找到一种方法来做到这一点:我的想法是拥有一个带有多重绑定的附加属性.
<DataTemplate x:Key="TableTemplate"> <Border BorderThickness="2" BorderBrush="SteelBlue"> <ListView x:Name="TableLayoutListView"> <tableLayout:ListViewExtension.MatrixSourceWithTemplateSelector> <MultiBinding Converter={StaticResource ListToMatrixConverter}> <Binding Path="this" /> <Binding {DynamicResource GenericLayoutTemplateSelector}/> </MultiBinding> </tableLayout:ListViewExtension.MatrixSourceWithTemplateSelector>
但是,这不是有效的xaml.任何想法如何将{DynamicResource GenericLayoutTemplateSelector}纳入多重绑定?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。