为 RadGridViewComboBox 列创建 DataTemplate

本文关键字:DataTemplate 创建 RadGridViewComboBox | 更新日期: 2023-09-27 18:34:54

而不是使用默认的telerik gridviewcombobox模板,我想覆盖它并使用wpf原始组合框。在尝试应用数据模板之前,它完全可以正常工作。

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

我是否设置了不正确的所选值属性值?任何协助将不胜感激。我认为当我设置数据模板时,它击中了错误的层。我认为它不再从视图模型中获取状态了。

为 RadGridViewComboBox 列创建 DataTemplate

这是我在

项目中使用的模板:

数据模板

                <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将可用。

请记住接下来的事情,您有几种方法可以绑定组合的物品来源:

  1. 定期绑定ItemsSource="{Binding SourceCollection, UpdateSourceTrigger=PropertyChanged}"。当源集合显示在单元格数据上下文中时,请使用这种方式。
  2. 相对绑定ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type PutHereTheTypeOfActualParentThatHoldsDataContextYouNeed}}, Path=DataContext.SourceCollection}" .当源集合位于父级的数据上下文中时,请使用这种方式。
  3. 来源于xaml ItemsSource="{Binding Source={StaticResource SourceCollection}}" .当源集合是在 Xaml 中生成的静态集合(例如;基于枚举类型(时,请使用这种方式。您需要<SomeParentVisualAccessibleByridViewDataColumn.Resource>部分中的下一个声明。

第三条的来源声明(另请阅读下一篇文章(

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

在我看来,您的问题是组合的 ItemsSource 出价不正确,请检查输出窗口中是否有相关的绑定错误异常。如果您需要任何帮助,请告诉我。

问候。