wpf - 选择行时将可编辑的 DataGridCells 切换到编辑模式?
问题描述
我的总体用户交互目标是清晰、直观地告知用户哪些 datagridcell 字段可用于编辑,哪些不可编辑。
下面的样式几乎可以工作(当用户选择行时,DataGridRow 上的 DataGridCells 被 IsSelected 触发),但是如果单元格(例如文本框)绑定到只读属性,则会引发 wpf 异常。也就是说,似乎要设置 IsEditing=True 才能工作,绑定属性需要是可写的。
低级异常是: System.InvalidOperationException: 'A TwoWay 或 OneWayToSource 绑定不能在只读属性上工作...
我希望可以在 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>
``
解决方案
我认为这可能会让你朝着正确的方向开始。 https://www.wpf-tutorial.com/styles/multi-triggers-multitrigger-multidatatrigger/
您能否详细说明您想用 IsSelected 和 IsEditing 完成什么?我想出了这个示例来向您展示如果相应的绑定对象根据您的既定目标将“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>
推荐阅读
- javascript - 更改原型的字段
- javascript - 为什么videojs进度条没有保持固定
- javascript - 如何将 qooxdoo 属性绑定到小部件?
- haskell - optparse-applicative bash 自动补全是如何工作的?
- reactjs - 反应不允许我编辑文本字段
- c++ - 如何使用 std::string 以正确的方式存储字节(无符号字符)?
- linux - 如何将 timstamps 添加到 crond 的本机日志中?
- android - Google Directions API:将当前步骤 JSON-Object 获取到 Android 上的当前位置
- python - 为什么一个对象的“__dict__”不能存储在它的__dict__中?
- regex - 检查字符串中是否不存在字符的正则表达式