在WPF DevExpress网格中禁用/启用运行时的超链接

本文关键字:启用 运行时 超链接 WPF DevExpress 网格 | 更新日期: 2023-09-27 17:57:35

我正在使用DevExpress Grid控件。这是我的网格结构:

<dxg:GridControl x:Name="grd_NoPartNumberLinesapprovedbutnotReceived" Height="600">
    <dxg:GridControl.Columns>                                                      
        <dxg:GridColumn FieldName="emo_number" Header="EMO" VisibleIndex="10" AllowEditing="False">
            <dxg:GridColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock>
                        <Hyperlink NavigateUri="{Binding Data.Hyperlink}" 
                                   Click="ClickonEmoHyperlink" 
                                   TargetName="_blank">
                            <TextBlock Text="{Binding Data.emo_number}" />
                        </Hyperlink>
                    </TextBlock>
                </DataTemplate>
            </dxg:GridColumn.CellTemplate>
        </dxg:GridColumn>
    </dxg:GridControl.Columns>
    <dxg:GridControl.View>
        <dxg:TableView x:Name="vwNoPartNumberLinesapprovedbutnotReceived" AutoWidth="True" ShowGroupPanel="False" />    
    </dxg:GridControl.View>
</dxg:GridControl>

Problem

现在我想在运行时基于某些条件禁用超链接,否则在其他情况下它将被启用。

在WPF DevExpress网格中禁用/启用运行时的超链接

您可以像其他属性一样,将Hyperlink控件的IsEnabled属性直接绑定到视图模型中的属性。

<Hyperlink  NavigateUri="{Binding Data.Hyperlink}" 
Click="ClickonEmoHyperlink" TargetName="_blank">
    <TextBlock Text="{Binding Data.emo_number}" 
    IsEnabled="{Binding Data.IsEnabled}"/>
</Hyperlink>

在这种情况下,您可以使用DataTrigger:

表示在绑定数据满足指定条件时应用属性值或执行操作的触发器。

示例:

<DataTemplate>            
    <TextBlock Name="MyTextBlock" Tag="True">
        <Hyperlink Name="MyHyperlink" Click="Hyperlink_Click">
            <TextBlock Text="TestText" />
        </Hyperlink>
    </TextBlock>        
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=Tag, ElementName=MyTextBlock}" Value="True">
            <Setter TargetName="MyHyperlink" Property="IsEnabled" Value="True" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=Tag, ElementName=MyTextBlock}" Value="False">
            <Setter TargetName="MyHyperlink" Property="IsEnabled" Value="False" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

如果TextBlock的Tag将为True,则启用Hyperlink,否则将禁用。

此外,还可以在DataTrigger中绑定属性。在数据中添加一些属性,例如HyperlinkIsEnabled,并在DataTrigger中写入以下内容:

<DataTrigger Binding="{Binding Path=HyperlinkIsEnabled}" Value="False">
    <Setter TargetName="MyHyperlink" Property="IsEnabled" Value="False" />
</DataTrigger>

若要成功更新属性,Data类必须实现INotifyPropertyChanged接口。