2016-02-16 26 views
0

而不是使用默認的telerik gridviewcombobox模板,我想覆蓋它並使用wpf原始組合框。它在嘗試應用數據模板之前完全正常工作。爲RadGridViewComboBox列創建DataTemplate列

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

我是否將選定的屬性值設置爲不正確?任何援助將不勝感激。我認爲當我設置數據模板時,它會觸及錯誤的層。我認爲它不再是從Viewmodel中獲取狀態。

回答

1

這裏是我的模板,我用我的項目:

數據模板

   <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位於Parent的數據上下文中時使用此方法。
  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招標,請檢查您是否在您的輸出窗口相關的綁定錯誤例外。讓我知道你是否需要任何幫助。

問候。