这是我的xaml
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:basic="clr-namespace:Emule.GUI.Design.Templates"
xmlns:Search="clr-namespace:Emule.GUI.Features.Search"
xmlns:Finder="clr-namespace:Emule.GUI.Util.Finder"mc:Ignorable="d"
x:Class="Emule.GUI.Features.Search.View" Title="View" Height="454" Width="696">
<!-- Default DataTemplate -->
<DataTemplate x:Key="DefaultDataTemplate">
<TextBox Grid.Row="2" Grid.Column="2" x:Name="joe"
Visibility="{Binding OperatorValueVisibility, Mode=OneWay}"
Text="{Binding OperatorValue, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
<!-- DataTemplate for string list -->
<DataTemplate x:Key="ListStringDataTemplate">
<basic:ListValuesSearch MinHeight ="740" x:Name="ListValues" />
</DataTemplate>
<!-- DataTemplate Selector -->
<Search:PropertyDataTemplateSelector x:Key="templateSelector"
DefaultDataTemplate="{StaticResource DefaultDataTemplate}"
BooleanDataTemplate="{StaticResource BooleanDataTemplate}"
EnumDataTemplate="{StaticResource EnumDataTemplate}"/>
<StackPanel Grid.Row="2" Grid.Column="2" HorizontalAlignment="Left" >
<ContentControl ContentTemplateSelector="{StaticResource templateSelector}"
Content="{Binding Path=PoDFinder.CodicePod}" />
</StackPanel>
</Window>
这是我的控件(wpftoolkit数据网格)
<UserControl x:Class="Emule.GUI.Design.Templates.ListValuesSearch"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WpfToolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
xmlns:Finder="clr-namespace:Emule.GUI.Util.Finder">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="DataGrid.Generic.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<StackPanel>
<WpfToolkit:DataGrid ItemsSource= "{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContentControl},
Path=OperatorValues, Mode=TwoWay}" x:Name="ListValuesSearchControl">
<WpfToolkit:DataGrid.Columns >
<WpfToolkit:DataGridTextColumn Header="Lista valori" Width="Auto" Binding="{Binding Path=Item}"/>
</WpfToolkit:DataGrid.Columns>
</WpfToolkit:DataGrid>
</StackPanel>
</UserControl>
我的数据模板ListStringDataTemplate
没有显示数据datagrid(显示类型名称),但请注意,如果我直接使用控件<basic:ListValuesSearch MinHeight ="740" x:Name="ListValues" />
而没有数据模板选择器正常工作。
我认为问题在于此路径ItemsSource= "{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContentControl}, Path=OperatorValues, Mode=TwoWay}"
我可以解决这个问题,我错了吗?
感谢
吨。
答案 0 :(得分:0)
为什么不摆脱DataTemplateSelector并在DataTemplates中指定DataType?它更容易和几乎工作。
在你的usercontrol中,你的绑定应该是这样的,但是只要PoDFinder.CodicePod是你的集合。如果不是,你必须添加属性的路径。
<StackPanel>
<WpfToolkit:DataGrid ItemsSource="{Binding}">
<WpfToolkit:DataGrid.Columns>
<WpfToolkit:DataGridTextColumn Header="Lista valori" Width="Auto" Binding="{Binding Path=Item}"/>
</WpfToolkit:DataGrid.Columns>
</WpfToolkit:DataGrid>
</StackPanel>