我正在尝试数据绑定DataGridComboBoxColumn
<DataGridComboBoxColumn Header="Number of Copies" SelectedItemBinding="{Binding NumberCopies}">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding LifeAreaList}"/>
<Setter Property="IsReadOnly" Value="True"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
</DataGridComboBoxColumn>
字符串
我在这里做错了什么,因为我在运行时得到了一个空的组合框。
有人跟踪我
系统.Windows.数据错误:第二章:找不到目标元素的控制FrameworkElement或FrameworkContentElement。BindingExpression:Path=LifeAreaList; DataItem=null;目标元素为“DataGridComboBoxColumn”(HashCode=49475561);目标属性为“ItemsSource”(类型为“IEnumerable”)
5条答案
按热度按时间yvgpqqbh1#
DataGridColumn
不是从FrameworkElement
或FrameworkContentElement
派生的,所以它不在可视树中,也没有DataContext
,这就是为什么你的绑定失败。如果你绑定到的
List<int>
对每个项目都是一样的,那么也许你应该找到另一种方法来绑定它,也许你可以让它静态化,并在绑定中使用StaticResource
。无论如何,要将
ItemsSource
绑定到源类中的List<int>
属性,您可以使用ElementStyle
和ElementEditingStyle
(正如其他人所指出的那样)。字符串
tgabmvqs2#
你不应该在样式中设置
ItemsSource
,列本身has such a property可能会覆盖你试图在样式中设置的任何东西。此外,你试图将其设置为错误的样式(该样式用于显示模式),你可以尝试在EditingElementStyle
中设置它,但我也不建议这样做。wb1gzix03#
为什么要在样式中设置项目源?
你可以试试这个代码:
字符串
如果LifeAreaList是复杂的类集合,并且您希望以自定义的方式显示它,则为DataGridTemplateColumn定义数据模板。
xvw2m8pv4#
我会尝试使用PresentationTraceSources.TraceLevel=“High”的常规DataGridColumn,看看是否存在绑定问题。
fnx2tebb5#
如果你想使用类似于
DataGridCobmoboxColumn
的东西,最好使用DataGridTemplateColumn
,你可以使用它,并具有相同的功能,而不需要使用ItemsSource
StaticResource
。我将
RelativeSource
中的根元素设置为UserControl
,如果您的DataGrid
位于Window
或Page
中,则需要相应地使用它们。字符串