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

это мой 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 не показывает сетку данных данных (показывает имя типа), но обратите внимание, что если я использую элемент управления <basic:ListValuesSearch MinHeight ="740" x:Name="ListValues" /> напрямую без селектора шаблона данных, он работает нормально.

Я думаю проблема в этом пути ItemsSource= "{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContentControl}, Path=OperatorValues, Mode=TwoWay}"

Я могу решить это, что я не так?

Благодарность

t.


person user1351709    schedule 06.05.2012    source источник


Ответы (1)


почему бы не избавиться от DataTemplateSelector и указать тип данных в ваших шаблонах данных? это намного проще и почти работает.

в вашем пользовательском контроле ваша привязка должна выглядеть так, но только если 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> 
person blindmeis    schedule 07.05.2012
comment
это ошибка... ListStringDataTemplate={StaticResource ListStringDataTemplate} не находится в PropertyDataTemplateSelector, с этим исправлением все в порядке - person user1351709; 08.05.2012
comment
как я уже сказал, нет необходимости в селекторе шаблонов данных, ваш код станет намного чище, если использовать только шаблоны данных, модели представления и правильную привязку :) - person blindmeis; 08.05.2012