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

.NET MAUI中IsEnabled设置导致Entry值不显示的异常问题

解决.NET MAUI MVVM中Entry禁用后不显示绑定值的问题

针对你遇到的Entry控件在ViewModel的WDXConfiguration.Enabled设为false后无法显示CodFiscale绑定值的问题,以下是几种实用的解决思路,能实现"显示值但不可编辑"的需求,同时支持首次输入、后续锁定的场景:

方法一:用IsReadOnly替代IsEnabled(推荐)

MAUI的Entry控件自带IsReadOnly属性,它只禁止用户编辑内容,但控件保持启用状态,绑定的值会正常显示,完全匹配你的业务场景。

实现步骤:

  1. 在ViewModel的WDXConfiguration类中添加IsReadOnly属性(或复用现有逻辑控制该属性):
public class WDXConfiguration : INotifyPropertyChanged
{
    private bool _isReadOnly;
    public bool IsReadOnly
    {
        get => _isReadOnly;
        set
        {
            _isReadOnly = value;
            OnPropertyChanged();
        }
    }

    private string _codFiscale;
    public string CodFiscale
    {
        get => _codFiscale;
        set
        {
            _codFiscale = value;
            OnPropertyChanged();
        }
    }

    // 实现INotifyPropertyChanged接口
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}
  1. 在XAML中绑定IsReadOnly而非IsEnabled:
<Entry Text="{Binding WDXConfiguration.CodFiscale}" 
       IsReadOnly="{Binding WDXConfiguration.IsReadOnly}" />
  1. 业务逻辑控制:首次允许输入时设IsReadOnly = false,后续锁定时设IsReadOnly = true即可。

方法二:调整绑定时机与初始化逻辑

如果一定要使用IsEnabled,需确保CodFiscale值先完成赋值,再设置IsEnabled为false,避免控件在未获取绑定值前就被禁用。

实现示例:

在ViewModel初始化时先赋值再禁用:

public class ConfigurationViewModel : INotifyPropertyChanged
{
    public WDXConfiguration WDXConfiguration { get; set; }

    public ConfigurationViewModel()
    {
        WDXConfiguration = new WDXConfiguration();
        // 先赋值CodFiscale
        WDXConfiguration.CodFiscale = "目标显示值";
        // 再设置禁用状态
        WDXConfiguration.Enabled = false;
    }

    // INotifyPropertyChanged实现代码...
}

XAML绑定保持不变:

<Entry Text="{Binding WDXConfiguration.CodFiscale}" 
       IsEnabled="{Binding WDXConfiguration.Enabled}" />

方法三:修改Entry禁用状态的样式

如果是Entry在IsEnabled=false时的默认样式导致文本不可见(比如文本色与背景色过于接近),可以自定义样式调整禁用状态的文本显示:

在Resources/Styles.xaml中添加自定义Entry样式:

<Style TargetType="Entry">
    <Setter Property="TextColor" Value="#000000" />
    <Setter Property="VisualStateManager.VisualStateGroups">
        <VisualStateGroupList>
            <VisualStateGroup x:Name="CommonStates">
                <VisualState x:Name="Disabled">
                    <VisualState.Setters>
                        <Setter Property="TextColor" Value="#000000" />
                        <Setter Property="BackgroundColor" Value="#F0F0F0" />
                    </VisualState.Setters>
                </VisualState>
            </VisualStateGroup>
        </VisualStateGroupList>
    </Setter>
</Style>

这样即使Entry被禁用,文本也会正常显示。


内容的提问来源于stack exchange,提问作者Denis De Pauli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:55:03