wpf - wpf 从另一个 DataGridTextColumn 按名称查找元素
问题描述
我想与另一个“ DataGridTemplateColumn
”按钮绑定,我尝试使用ElementName
但它unset framework value
在我的转换器中返回我。我想根据按钮启用状态更改行颜色,但这是一个嵌套了DataGrid
.
<DataGridTextColumn Header="{x:Static loc:ManageRequirementsResource.lblName}" Binding="{Binding Name}" Width="0.5*" HeaderStyle="{StaticResource DataGridDefaultColumnHeaderStyle}"
ElementStyle="{StaticResource UcPredecessorSuccessorEnableDisableStyle}"/>
<DataGridTextColumn Header="{x:Static loc:ManageRequirementsResource.lblDescription}" Binding="{Binding Description}" Width="*"
HeaderStyle="{StaticResource DataGridColumnHeaderStyleWithoutRightBorder}">
<DataGridTextColumn.ElementStyle>
<Style BasedOn="{StaticResource ToolTipWithContentTrimmedTextBlockStyle}" TargetType="{x:Type TextBlock}">
<Style.Resources>
<converters:MultiBindingPredecessorSuccessorIsEnabledConverter x:Key="MultiBindingPredecessorSuccessorIsEnabledConverter"/>
</Style.Resources>
<Style.Triggers>
<DataTrigger Value="False">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource MultiBindingPredecessorSuccessorIsEnabledConverter}">
<Binding />
<Binding ElementName="This" Path="ViewModel.SelectedRequirement"/>
##### Unable to find, UnSetValue, it's in another column
<Binding ElementName="btnAddCommand"/>
##### Unable to find, UnSetValue, it's in another column
<Binding ElementName="btnAddCommand" Path="IsEnabled"/>
</MultiBinding>
</DataTrigger.Binding>
<DataTrigger.Setters>
<Setter Property="Background" Value="{StaticResource GridHeaderBackgroundBrush}"/>
<Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
</DataTrigger.Setters>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTemplateColumn HeaderStyle="{StaticResource DataGridColumnNoBorderHeaderStyle}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button ToolTip="{x:Static reqPages:TraceabilityResource.linkToEditRequirementsTooltip}" Style="{StaticResource PopupMenueButtonStyle}" Click="LinkButton_OnClick" PreviewMouseLeftButtonUp="Button_OnMouseLeftButtonUp">
<Image Source="/Project;component/Resources/Images/link.png" Height="13" Width="13" />
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn HeaderStyle="{StaticResource DataGridColumnNoBorderHeaderStyle}" x:Name="DataGridTemplateColumn">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Background" Value="White" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=btnAddCommand, Path=IsEnabled}" Value="False">
<Setter Property="Background" Value="{StaticResource GridHeaderBackgroundBrush}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
**<!-- ######## I want to bind with this button ######-->**
<Button x:Name="btnAddCommand" ToolTipService.ShowOnDisabled="True" Command="{Binding ElementName=This, Path=ViewModel.AddingCommand}" CommandParameter="{Binding}" PreviewMouseLeftButtonUp="Button_OnMouseLeftButtonUp" Style="{StaticResource PopupMenueButtonStyle}">
<Image Height="20" >
<Image.Source>
<MultiBinding Converter="{StaticResource MultiBindingPredecessorSuccessorImageSourceConverter}">
<Binding/>
<Binding ElementName="This" Path="ViewModel.SelectedRequirement"/>
<Binding ElementName="btnAddCommand"/>
<Binding RelativeSource="{RelativeSource self}" Path="IsEnabled"/>
</MultiBinding>
</Image.Source>
</Image>
<Button.ToolTip>
<MultiBinding Converter="{StaticResource MultiBindingPredecessorSuccessorToolTipConverter}">
<Binding/>
<Binding ElementName="This" Path="ViewModel.SelectedRequirement"/>
<Binding ElementName="btnAddCommand"/>
<Binding ElementName="This" Path="ViewModel.IsSuccessor"/>
<Binding RelativeSource="{RelativeSource self}" Path="IsEnabled"/>
</MultiBinding>
</Button.ToolTip>
</Button>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
解决方案
您不能绑定到在另一列的模板中定义的元素。它们属于不同的名称范围。
您应该做的是将两列中元素的属性绑定到相同的源属性。
当您更改第一列元素的属性时,要更新第二列元素的属性(反之亦然),您的数据对象应实现INotifyPropertyChanged
接口并为数据绑定源属性发出更改通知。
推荐阅读
- c# - 使用 Dapper 和 Npgsql 无法从 Guid 列表中进行选择
- javascript - Cypress:jQuery 选择器“:contains()”中的正则表达式
- python - macOS BigSur 上 python 版本的问题
- javascript - 在我的情况下如何通过点击删除活动课程
- javascript - 向浏览器显示 JSON 数据
- python - 使用 Python 将参数传递给 Cloud Workflows
- java - 如何使用 Java 画布和矩形打印标签云
- excel - 如何基于另一个单元格在一个单元格中写入
- c# - 模型查询Mysql和EF6 c# windows窗体的错误
- bots - 我是一个新的 discord.py 用户,试图嵌入一个 8ball 命令