gpt4 book ai didi

.net-maui - 如果方法名称以小写字符开头,.Net Maui [RelayCommand] 无法编译?

转载 作者:行者123 更新时间:2023-12-03 08:02:23 26 4
gpt4 key购买 nike

刚接触 .Net MAUI,正在将 CommunityToolkit.Mvvm 版本 8.0.0 与 Microsoft Visual Studio Community 2022(64 位)一起使用 - 当前版本 17.3.3

在我的 XAML 中,我有一个按钮:

<Button 
Text="Add"
Command="{Binding data_addCommand}"
/>

在我的 ViewModel 中,我有以下方法:

[RelayCommand]
private void data_add()
{

}

当我构建编译器时,编译器失败并出现以下错误:

Error   CS0102  The type '[my_viewmodel_name]' already contains a definition for 'data_addCommand'

但是,出于绝望,我将 XML 更改为:

<Button 
Text="Add"
Command="{Binding Data_addCommand}"
/>

...在我的 ViewModel 中:

[RelayCommand]
private void Data_add()
{

}

唯一的区别是 Binding 命令中的方法名称和 ViewModel 中的方法名称以大写“D”开头,而不是小写“d”。

当我构建时,它成功完成! - ?? -- 我是否错过了文档中规定 [RelayCommand] 的方法名称必须以大写字母开头的内容?

我确实记得,当使用 [ObservableProperty] 属性时,生成的属性将自动使用 UpperCamelCase 格式作为其名称。但是,我不记得看到过任何有关 [RelayCommand] 的内容。我假设情况就是这样(请原谅双关语),并且 [RelayCommand] 属性将与 [ObservableProperty] 属性一样工作——也就是说,将使用 UpperCamelCase 格式作为方法名称——因此,必须以大写字符。

只是想知道是否有任何“官方”记录了这种行为,因为它让我陷入了困境。

提前致谢。

最佳答案

使用 MVVM CommunityToolkit 时,即当您将 NuGet 包“CommunityToolkit.Mvvm”包含到项目中,然后使用 [RelayCommand] 属性修饰方法名称时,工具包会自动生成一个支持字段 使用小写。该工具包还将自动生成 IRelayCommand 对象。

例如,如果您有以下代码:

[RelayCommand]
private void method_name()
{

}

以下代码将由 CommunityToolkit 自动生成:

// A backing field ...
private global::CommunityToolkit.Mvvm.Input.RelayCommand? method_nameCommand;

// An IRelayCommand object ...
public global::CommunityToolkit.Mvvm.Input.IRelayCommand method_nameCommand => method_nameCommand ??= new global::CommunityToolkit.Mvvm.Input.RelayCommand(new global::System.Action(method_name));

自动生成的代码会导致支持字段名称和 IRelayCommand 对象名称相同,从而导致编译器错误。

现在,如果您将方法名称更改为使用大写字符,即:

[RelayCommand]
private void Method_name()
{

}

自动生成的代码如下所示,并且会成功编译。

// A backing field ...
private global::CommunityToolkit.Mvvm.Input.RelayCommand? method_nameCommand;

// An IRelayCommand object ...
public global::CommunityToolkit.Mvvm.Input.IRelayCommand Method_nameCommand => method_nameCommand ??= new global::CommunityToolkit.Mvvm.Input.RelayCommand(new global::System.Action(Method_name));

所以 - (未记录的)经验法则似乎是:

使用 [RelayCommand] 属性修饰方法时,请确保方法名称的第一个字符为大写。

关于.net-maui - 如果方法名称以小写字符开头,.Net Maui [RelayCommand] 无法编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73562438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com