我在.NET 4.5中使用wpf,我希望有一个数据网格模板嵌入到其他DataTemplates中。我使用DataTemplateSelector来显示公共父类的子列表的内容。
我只想更改DataGrid的ItemsSource,因为它在每个类中都有不同的属性名称。
我的DataGrid模板中的常规绑定可以具有相同的绑定,因为列表始终包含相同的类。
因此,我创建了一个从DataGrid派生的自定义类。在行中它工作得很好,但是当我使用我的自定义类时,我没有在DataGrid中获得任何输出。
那么我怎样才能使我的自定义控件make行为像普通的datagrid一样。我只想在那里更改数据源。
提前致谢。
内联示例工作正常:
<DataGrid ItemsSource="{Binding Path=KnotPoints, Converter={StaticResource geoArrayToDataGrid}}" AutoGenerateColumns="False">
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=DataContext.Num, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridRow}}"/>
</DataTemplate>
</DataGrid.RowHeaderTemplate>
<DataGrid.Columns>
<DataGridTextColumn Header="X" Binding="{Binding X}"/>
<DataGridTextColumn Header="Y" Binding="{Binding Y}"/>
<DataGridTextColumn Header="Z" Binding="{Binding Z}"/>
</DataGrid.Columns>
</DataGrid>
Custom UserControl不会返回任何内容:
<DataGrid x:Class="FlexForCFK.CAD.Controls.MultiGeoStruct"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
AutoGenerateColumns="False">
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=DataContext.Num, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridRow}}"/>
</DataTemplate>
</DataGrid.RowHeaderTemplate>
<DataGrid.Columns>
<DataGridTextColumn Header="X" Binding="{Binding X}"/>
<DataGridTextColumn Header="Y" Binding="{Binding Y}"/>
<DataGridTextColumn Header="Z" Binding="{Binding Z}"/>
</DataGrid.Columns>
</DataGrid>
修改 自定义Control MutliGeoStruct放在代码中:
<TreeViewItem Header="Knot Points" IsExpanded="True">
<y:MultiGeoStruct ItemsSource="{Binding Path=KnotPoints, Converter={StaticResource geoArrayToDataGrid}}"/>
</TreeViewItem>
(y是我控件的命名空间)
xmlns:y="clr-namespace:FlexForCFK.CAD.Controls"
答案 0 :(得分:0)
编辑:不是解决方案!
埃尔贡佐是对的。我必须设置 DataContext="{Binding}"
用于我的MultiGeoStruct DataGrid。
<y:MultiGeoStruct DataContext="{Binding}" ItemsSource="{Binding Path=KnotPoints, Converter={StaticResource geoArrayToDataGrid}}"/>
解决了这个问题。但那是为什么呢?在我的顶级TreeView中,我根本没有设置DataContext,据我所知,如果你使用ItemSource,Collection直接被赋予Items,而父的DataContext根本不需要任何定义。
所以我只是设置,当我的数据加载到我的TreeView
中this.ItemsSource = m;
它运作得很好。
非常感谢你的帮助。
如果你知道答案,请赐教。如果我有解释,我会更新。