当使用PropertyChanged.Fody包中的[AddINotifyPropertyChangedInterface]属性时,我遇到了.NET MAUI中的数据绑定问题。
我有一个视图模型,它使用这个属性实现了INotifyPropertyChanged接口,并且我已经在视图模型和视图之间设置了数据绑定。
我遇到的问题是CheckBox和Switch控件的双向数据绑定不能正常工作。
当我直接与这些控件交互时(例如,通过切换Switch或选中/取消选中CheckBox),然后视图模型属性不会更新。
然而,当我以编程方式更新视图模型属性时(例如,通过单击执行命令的Button),控件会正确更新,直到我直接与控件交互。
感谢和问候Vijith
下面是我的代码示例:
using PropertyChanged;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace MauiApp4.MVVM.ViewModels
{
[AddINotifyPropertyChangedInterface]
internal class MainViewModel
{
public ICommand Command => new Command(command);
public bool isSelected { get; set; }
void command()
{
isSelected = !isSelected;
}
}
}
<?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}"/>
<Switch IsToggled="{Binding isSelected}"/>
<Button Text="Change" Command="{Binding Command}"/>
</VerticalStackLayout>
</ScrollView>
</ContentPage>
using MauiApp4.MVVM.ViewModels;
namespace MauiApp4
{
public partial class MainPage : ContentPage
{
int count = 0;
public MainPage()
{
InitializeComponent();
BindingContext = new MainViewModel();
}
}
}
1条答案
按热度按时间jyztefdp1#
我安装了
PropertyChanged.Fody
包并测试了你提供的代码,但它运行良好:当我单击CheckBox或Switch时,其他两个(label和CheckBox/Switch)将一起改变状态。我还在MainViewModel的
isSelected
属性上添加了一个断点进行调试,结果是isSelected
会更新。此外,还有另一种方法可以实现:
NuGet安装
CommunityToolkit.Mvvm
包。然后将MainViewModel更改为:然后在xaml中将
isSelected
更改为IsSelected
:更新:
根据您的回复,问题的原因是VS的版本。卸载VS 2022 Preview并使用VS 2022后,问题已得到解决。