创建一个用于RadGridViewComboBox列的DataTemplate

26 浏览
0 Comments

创建一个用于RadGridViewComboBox列的DataTemplate

我想覆盖默认的Telerik GridViewComboBox模板,并使用WPF原始的ComboBox。在尝试应用DataTemplate之前,它完全正常工作。

Header="状态"

DataMemberBinding="{Binding Status_Id}"

ItemsSource="{Binding Statuses, Mode=TwoWay}"

DisplayMemberPath="StatusName"

SelectedValueMemberPath="Id">

当我尝试应用DataTemplate时,ComboBox现在显示空值。

ItemsSource="{Binding Statuses, Mode=TwoWay}"

DisplayMemberPath="StatusName"

SelectedValuePath="Id">

我设置选定值属性的值是否不正确?任何帮助将不胜感激。我认为当我设置DataTemplate时,它会命中错误的层次。我认为它不再从ViewModel中获取Statuses。

0
0 Comments

问题的出现原因是绑定ComboBox的ItemsSource时可能存在错误。解决方法是检查绑定是否正确,并查看输出窗口中是否有相关的绑定错误异常。

这里提供了两个模板,GridViewDataColumn.CellTemplate在包含单元格不处于焦点状态时可用,而CellEditTemplate在包含单元格处于焦点状态且用户更改选择时可用。

在绑定ComboBox的ItemsSource时,有几种方式可供选择:

1. 使用常规绑定,例如ItemsSource="{Binding SourceCollection, UpdateSourceTrigger=PropertyChanged}"。当SourceCollection在单元格的DataContext中展示时,可以使用这种方式。

2. 使用相对绑定,例如ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type PutHereTheTypeOfActualParentThatHoldsDataContextYouNeed}}, Path=DataContext.SourceCollection}"。当SourceCollection在父级的DataContext中时,可以使用这种方式。

3. 从XAML中获取源,例如ItemsSource="{Binding Source={StaticResource SourceCollection}}"。当SourceCollection是在XAML中生成的静态集合时(例如基于枚举类型),可以使用这种方式。需要在SomeParentVisualAccessibleByridViewDataColumn.Resource部分进行声明。

对于第三种方式,需要在XAML中进行源的声明,示例如下:


    
        
    

以上是我对问题出现原因和解决方法的整理。如果需要帮助,请随时告诉我。

0