Wpf 如何以行的读取模式呈现DataGridComboxColumn列中的文本
我有一个数据网格,带有一个组合框列,定义为:Wpf 如何以行的读取模式呈现DataGridComboxColumn列中的文本,wpf,xaml,datagrid,Wpf,Xaml,Datagrid,我有一个数据网格,带有一个组合框列,定义为: <!-- Category --> <DataGridComboBoxColumn Header="Category" SelectedValueBinding="{Binding SelectedCategory}" DisplayMemberPath="DisplayName"> <!-- Display mode
<!-- Category -->
<DataGridComboBoxColumn Header="Category" SelectedValueBinding="{Binding SelectedCategory}" DisplayMemberPath="DisplayName">
<!-- Display mode -->
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="Text" Value="{Binding SelectedCategoryDisplayName}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<!-- Edit mode -->
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding Transaction.Type}" Value="Debit">
<Setter Property="ItemsSource" Value="{Binding Source={StaticResource debitCategories}}" />
</DataTrigger>
<DataTrigger Binding="{Binding Transaction.Type}" Value="Credit">
<Setter Property="ItemsSource" Value="{Binding Source={StaticResource creditCategories}}" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
在designer中,这给了我以下错误:
A TwoWay or OneWayToSource binding cannot work on the read-only property 'SelectedCategoryDisplayName' of type XXX
为什么??在DataGridComboxColumn.ElementStyle
中使用该属性时,为什么WPF关心该属性是只读的。如果我理解正确,datagridcomboxcolumn.ElementStyle
是单元格读取模式的样式
好的,我在绑定上设置了,Mode=OneWay
,它停止了抱怨,但没有显示任何内容
如何使组合框在单元格/行的读取模式(非编辑)下显示视图模型提供的文本
为什么??在DataGridComboBoxColumn.ElementStyle中使用该属性时,为什么WPF关心该属性是只读的
因为您绑定到ComboBox的Text属性,并且默认情况下该属性是双向的。源属性必须具有公共setter,或者需要将绑定模式设置为单向
如何使组合框在单元格/行的读取模式(非编辑)下显示视图模型提供的文本
试试这个:
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<TextBlock Text="{Binding SelectedCategoryDisplayName, Mode=OneWay}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGridComboBoxColumn.ElementStyle>
谢谢您的回答。但是,代码段不起作用。实际上,SelectedCategoryDisplayName
属于T
。我可以在调用的调试器中看到它。但是UI仍然没有显示任何内容来代替文本块的位置。
会弄乱它吗?再一次-我的救世主;)奇怪的副作用-组合框现在不想进入编辑模式。。。这一定是因为我们已经完全覆盖了它的视图模式,现在“不知道”如何进入编辑模式。然后用DataGridTemplateColumn替换组合框。同样的功能-更加灵活。它要么是这样,要么只是显示SelectedValueBinding属性指定的属性。
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<TextBlock Text="{Binding SelectedCategoryDisplayName, Mode=OneWay}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGridComboBoxColumn.ElementStyle>