You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI中DevExpress DataGridView图片依IsInLocalCache控制显示

解决方案

问题根源

你当前的IsVisible绑定写法错误,Source={x:Reference IsInLocalCache}试图引用一个名为IsInLocalCache的控件,但IsInLocalCache是Document对象的属性,并非控件,因此绑定无法生效。以下是几种可行的实现方式:


方式一:直接绑定属性

直接将Image的IsVisible绑定到当前行数据(即Document对象)的IsInLocalCache属性,这是最简单的实现:

<dxg:TemplateColumn Row="1" Column="3" ColumnSpan="1" Caption="Icon" IsReadOnly="true" AllowSort="False">
    <dxg:TemplateColumn.DisplayTemplate>
        <DataTemplate>
            <!-- 绑定当前DataContext(Document实例)的IsInLocalCache属性 -->
            <Image Source="icon.svg" IsVisible="{Binding IsInLocalCache}" />
        </DataTemplate>
    </dxg:TemplateColumn.DisplayTemplate>
</dxg:TemplateColumn>

方式二:使用布尔值转可见性转换器(适用于需反向逻辑的场景)

如果后续需要调整显示逻辑(比如IsInLocalCache为false时显示图片),可以使用转换器:

  1. 先实现转换器类:
public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value is bool isVisible && isVisible ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value is Visibility visibility && visibility == Visibility.Visible;
    }
}
  1. 在页面资源中声明转换器:
<ContentPage.Resources>
    <local:BooleanToVisibilityConverter x:Key="BoolToVis" />
</local:ContentPage.Resources>
  1. 绑定转换器:
<Image Source="icon.svg" IsVisible="{Binding IsInLocalCache, Converter={StaticResource BoolToVis}}" />

方式三:使用DataTrigger控制显示

通过触发器根据IsInLocalCache的值动态设置可见性:

<dxg:TemplateColumn Row="1" Column="3" ColumnSpan="1" Caption="Icon" IsReadOnly="true" AllowSort="False">
    <dxg:TemplateColumn.DisplayTemplate>
        <DataTemplate>
            <Image Source="icon.svg">
                <Image.Triggers>
                    <!-- 当IsInLocalCache为false时,隐藏图片 -->
                    <DataTrigger TargetType="Image" Binding="{Binding IsInLocalCache}" Value="False">
                        <Setter Property="IsVisible" Value="False" />
                    </DataTrigger>
                </Image.Triggers>
            </Image>
        </DataTemplate>
    </dxg:TemplateColumn.DisplayTemplate>
</dxg:TemplateColumn>

补充说明

如果IsInLocalCache属性会动态变更,需要让Document类实现INotifyPropertyChanged接口,否则属性值变化后UI不会自动更新:

public class Document : INotifyPropertyChanged
{
    [Key]
    [SQLite.PrimaryKey, AutoIncrement]
    public Guid DocId { get; set; }
    [Required]
    public DocStatusEnum Status { get; set; }
    
    private bool _isInLocalCache;
    [SQLite.Ignore]
    public bool IsInLocalCache 
    { 
        get => _isInLocalCache; 
        set 
        {
            if (_isInLocalCache != value)
            {
                _isInLocalCache = value;
                OnPropertyChanged();
            }
        } 
    } = false;
    
    public DateTime? LastChangeDateTime { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

内容的提问来源于stack exchange,提问作者Val

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 23:12:27