2016-02-16 4 views
0

вместо использования шаблона gridviewcombobox по умолчанию для telerik, я хочу переопределить его и использовать исходную выкладку wpf. Он отлично работает, прежде чем пытаться применить шаблон данных.Создайте DataTemplate для столбца RadGridViewComboBox

<Telerik:GridViewComboBoxColumn 
    Header="Status" 
    DataMemberBinding="{Binding Status_Id}" 
    ItemsSource="{Binding Statuses, Mode=TwoWay}" 
    DisplayMemberPath="StatusName" 
    SelectedValueMemberPath="Id"> 
</Telerik:GridViewComboBoxColumn> 

Когда я пытаюсь применить шаблон данных, в поле со списком теперь отображаются пустые значения.

<Telerik:GridViewComboBoxColumn Header="Status" 
    <Telerik:GridViewComboBoxColumn.CellTemplate> 
     <DataTemplate> 
      <ComboBox SelectedValue="{Binding Status_Id}" 
         ItemsSource="{Binding Statuses, Mode=TwoWay}" 
         DisplayMemberPath="StatusName" 
         SelectedValuePath="Id"> 
      </ComboBox> 
     </DataTemplate> 
    </Telerik:GridViewComboBoxColumn.CellTemplate> 
</Telerik:GridViewComboBoxColumn> 

Я устанавливаю неверное значение свойств выбранного значения? Будем очень благодарны любой помощи. Я думаю, когда я устанавливаю datatemplate, он попадает в неправильный слой. Я не думаю, что он больше захватывает статусы из Viewmodel.

ответ

1

Вот мой шаблон я использую в своих проектах:

Template Data

   <telerik:GridViewDataColumn Width="150" DataMemberBinding="{Binding Path=StackOptimizerSelectedRule}" 
             Header="Rules" 
             IsFilterable="False" IsReorderable="False"> 
       <telerik:GridViewDataColumn.CellTemplate> 
        <DataTemplate DataType="flowConfiguration:StackOptimizerParameterRuleTreeViewModel"> 
         <TextBlock Text="{Binding StackOptimizerSelectedRule, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource EnumTypeConverterKey}}"></TextBlock> 
        </DataTemplate> 
       </telerik:GridViewDataColumn.CellTemplate> 

       <telerik:GridViewDataColumn.CellEditTemplate> 
        <DataTemplate DataType="flowConfiguration:StackOptimizerParameterRuleTreeViewModel"> 
         <ComboBox 
          ItemsSource="{Binding Source={StaticResource StackOptimizerSelectionRules}}" 
          SelectedItem="{Binding StackOptimizerSelectedRule, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
          <ComboBox.ItemTemplate> 
           <DataTemplate DataType="flowConfiguration:StackOptimizerParameterRuleTreeViewModel"> 
            <TextBlock Text="{Binding Converter={StaticResource EnumTypeConverterKey}, UpdateSourceTrigger=PropertyChanged}"/> 
           </DataTemplate> 
          </ComboBox.ItemTemplate> 
         </ComboBox> 
        </DataTemplate> 
       </telerik:GridViewDataColumn.CellEditTemplate> 
      </telerik:GridViewDataColumn> 

Пояснения

Вот два шаблона. GridViewDataColumn.CellTemplate будет доступен, если ячейка не находится в фокусе. CellEditTemplate будет доступен, когда содержащая ячейка находится в фокусе, и пользователь изменит свой выбор.

Пожалуйста, держите в уме следующие вещи, у вас есть несколько способов, связанного с ItemsSource в комбо:

  1. Регулярное связывание ItemsSource="{Binding SourceCollection, UpdateSourceTrigger=PropertyChanged}". Используйте этот способ, когда ваш SourceCollection представляет в Cell DataContext.
  2. Относительное связывание ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type PutHereTheTypeOfActualParentThatHoldsDataContextYouNeed}}, Path=DataContext.SourceCollection}". Используйте этот способ, когда ваш SourceCollection находится внутри контекста данных родителя.
  3. Источник от xaml ItemsSource="{Binding Source={StaticResource SourceCollection}}". Используйте этот способ, когда ваш SourceCollection является статическим коллекцией. Сгенерировано в Xaml (например, на основе типов перечислений). Вам понадобится следующая декларация в разделе <SomeParentVisualAccessibleByridViewDataColumn.Resource>.

Декларация источника для третьего (in addition read the next article)

<ObjectDataProvider x:Key="SourceCollection" 
          MethodName="GetValues" 
          ObjectType="{x:Type flowConfiguration:StackOptimizerSelectionRules}"> 
     <ObjectDataProvider.MethodParameters> 
      <x:Type TypeName="flowConfiguration:StackOptimizerSelectionRules"/> 
     </ObjectDataProvider.MethodParameters> 
    </ObjectDataProvider> 

На мой взгляд ваша проблема ItemsSource выжидать неверный комбо, проверьте, если вы связаны связывающую исключение ошибок в выходном окне. Дайте мне знать, если вам нужна помощь.

С уважением.