2012-05-06 8 views
0

это моя XAMLПривязка к свойству через ContentControl, используя DataTemplate и DataTemplateSelector

<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}"

я могу решить эту проблему, Wath я неправ?

спасибо

t.

ответ

0

Почему бы не избавиться от DataTemplateSelector и указать DataType в своих DataTemplates? его намного легче и почти работать.

В вашем пользовательском контроле ваша привязка должна выглядеть так, но только если 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> 
+0

это ошибка ... ListStringDataTemplate = «{StaticResource ListStringDataTemplate}» не в PropertyDataTemplateSelector с этой коррекции работы тонкой – user1351709

+0

как я сказал, что нет никакой необходимости datatemplateselector, ваш код станет намного чище, с просто datatemplate, viewmodels und right binding :) – blindmeis

+0

Мне нужно изменить datatemplate динамически ... – user1351709

Смежные вопросы