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

.NET MAUI使用AddINotifyPropertyChangedInterface双向绑定异常

.NET MAUI中PropertyChanged.Fody双向绑定失效的解决方案

问题根源

  1. 属性命名不符合.NET规范:原代码使用小写开头的isSelected属性,虽绑定系统理论支持大小写匹配,但Fody在织入INotifyPropertyChanged实现时,对非PascalCase命名的属性可能存在隐性处理问题,导致控件向ViewModel的反向绑定失效。
  2. 未显式指定双向绑定模式:尽管CheckBox的IsChecked和Switch的IsToggled默认绑定模式为TwoWay,但显式声明可避免框架对绑定模式的识别偏差。

解决步骤

1. 修正ViewModel属性命名

将ViewModel中的属性改为符合.NET规范的PascalCase命名,确保Fody能正确生成属性变更通知:

using PropertyChanged;
using System.Windows.Input;

namespace MauiApp4.MVVM.ViewModels
{
    [AddINotifyPropertyChangedInterface]
    internal class MainViewModel
    {
        public ICommand Command => new Command(ToggleSelection);

        // 改为PascalCase命名规范
        public bool IsSelected { get; set; }

        void ToggleSelection()
        {
            IsSelected = !IsSelected;
        }
    }
}

2. 更新XAML绑定配置

同步修改XAML中的绑定路径,并显式指定Mode=TwoWay确保双向绑定生效:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiApp4.MainPage">

    <ScrollView>
        <VerticalStackLayout
            Spacing="25"
            Padding="30,0"
            VerticalOptions="Center">

            <Label Text="{Binding IsSelected}"/>
            <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}"/>
            <Switch IsToggled="{Binding IsSelected, Mode=TwoWay}"/>
            <Button Text="Change" Command="{Binding Command}"/>

        </VerticalStackLayout>
    </ScrollView>

</ContentPage>

3. 验证Fody配置

确保项目已正确安装PropertyChanged.Fody NuGet包,且项目根目录存在FodyWeavers.xml文件(无则新建),内容如下:

<?xml version="1.0" encoding="utf-8"?>
<Weavers>
  <PropertyChanged/>
</Weavers>

验证效果

重新编译运行后:

  • 手动操作CheckBox/Switch时,ViewModel的IsSelected属性会同步更新,Label文本随之变化;
  • 点击按钮触发Command更新属性时,控件正常响应,且双向绑定功能在手动操作后不会失效。

内容的提问来源于stack exchange,提问作者Vijith Amar TK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:48:19