Wpf 选择行时是否将可编辑DataGridCells切换到编辑模式?

Wpf 选择行时是否将可编辑DataGridCells切换到编辑模式?,wpf,datagrid,wpf-style,Wpf,Datagrid,Wpf Style,我的总体用户交互目标是清晰直观地告知用户哪些datagridcell字段可供编辑,哪些不可编辑 下面的样式几乎可以工作(当用户选择行时,DataGridRow上的DataGridCells会被IsSelected触发),但是如果单元格(例如文本框)绑定到只读属性,则会引发wpf异常。也就是说,似乎要将IsEditing=True设置为有效,绑定属性需要是可写的 低级异常为:System.InvalidOperationException:“双向或单向ToSource绑定无法在只读属性上工作 我希

我的总体用户交互目标是清晰直观地告知用户哪些datagridcell字段可供编辑,哪些不可编辑

下面的样式几乎可以工作(当用户选择行时,DataGridRow上的DataGridCells会被IsSelected触发),但是如果单元格(例如文本框)绑定到只读属性,则会引发wpf异常。也就是说,似乎要将IsEditing=True设置为有效,绑定属性需要是可写的

低级异常为:System.InvalidOperationException:“双向或单向ToSource绑定无法在只读属性上工作

我希望可以在MultiTrigger中检查DataGridCell是否绑定到可写属性,但我对数据绑定的理解还不够深入

            <Style TargetType="{x:Type DataGridCell}">

                <Style.Triggers>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsSelected" Value="True"/>
                            <!--<Condition Property="IsFocused" Value="True"/>-->
                        </MultiTrigger.Conditions>
                        <Setter Property="IsEditing" Value="True"/>
                    </MultiTrigger>
``

``

我想这可能会让你朝着正确的方向开始。

你能更清楚地说明你到底想通过IsSelected和IsEdit实现什么吗? 我提出这个例子是为了向您展示,如果相应的绑定对象按照您所述的目标将“ReadOnly”设置为true,那么如何禁用文本框。这将清楚地显示哪些单元格可以编辑

<DataGrid x:Name="textBoxGrid"
                  ItemsSource="{Binding ItemList}"
                  AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding Text}"
                                     IsReadOnly="{Binding ReadOnly}">
                                <TextBox.Style>
                                    <Style TargetType="TextBox">
                                        <Setter Property="IsEnabled"
                                                Value="True" />
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding ReadOnly}"
                                                         Value="true">
                                                <Setter Property="IsEnabled"
                                                        Value="False" />
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </TextBox.Style>
                            </TextBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>


欢迎对其他解决方案或最佳实践提出任何意见。谢谢,但我希望在应用程序范围内对默认datagrid样式进行更改覆盖,这样,如果您单击datagrid中的某一行,所有可写的有界字段都将通过设置IsEdit=True进入编辑模式。除了在只读绑定上引发的异常之外,我顶部的触发器可以完成所有这些。这就是为什么我想知道是否有解决异常抛出的方法。抱歉,我的wpf不够好。当用户一次只能编辑一个单元格时,为什么要告诉DataGrid显式激活所有单元格的编辑模式?我的建议是让内置编辑事件自然发生,并控制数据中存储的值无法编辑的内容。无论如何,我认为我在回答中发布的链接仍将帮助您将触发器应用到应用程序样式模板。我同意,在任何windows控件中,都不应尝试调整或脱离自然编辑流程。所以,在时间的压力下,我从一开始就提出了一个坏主意。