在我的视图模型中,我想使用 CommunityToolkit.Mvvm 中的源生成器,但由于某种原因,我似乎无法[ICommand]在我的操作方法中使用属性。
我得到的错误是:
无法应用属性类“ICommand”,因为它是抽象的
这是我的视图模型模型的基类。
using CommunityToolkit.Mvvm.ComponentModel;
namespace MyApp.ViewModels
{
public partial class BaseViewModel : ObservableObject
{
[ObservableProperty]
bool isBusy = false;
[ObservableProperty]
string title = string.Empty;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的视图模型类:
public class MyViewModel : BaseViewModel
{
[ObservableProperty]
string firstName;
[ObservableProperty]
string lastName;
[ICommand] // <-- This is where I get the error I mentioned above
async Task DoSomething()
{
// Do something here...
}
}
Run Code Online (Sandbox Code Playgroud) 我的 MAUI 应用程序在模拟器中以调试模式运行时运行良好,但当我在发布模式下运行时它无法运行(在模拟器或物理设备中都不起作用)它崩溃了。
我正在使用Mvvm一个名为 的库来使用该架构CommunityToolkit.Mvvm。我提到这一点是因为我不知道这是否导致了问题。
我下载了一个Crash Log Viewer在我的物理设备中调用的应用程序来检查应用程序给出的崩溃和错误,但我收到了以下错误:
This information is generated from the Crash Log View application. - https://play.google.com/store/apps/details?id=com.arumcomm.crashlogviewer
Process: com.companyname.ventas_citel
PID: 12230
UID: 10313
Flags: 0x20c8be44
Package: com.companyname.ventas_citel v1 (1.0)
Foreground: No
Process-Runtime: 63820382
Build: samsung/a10sub/a10s:11/RP1A.200720.012/A107MUBU6CVG3:user/release-keys
android.runtime.JavaProxyThrowable: System.FieldAccessException: Field `Microsoft.Maui.Controls.VisualElement:ZIndexProperty' is inaccessible from method `Ventas_Citel.Views.Login.Login:InitializeComponent ()'
at Ventas_Citel.Views.Login.Login..ctor(LoginViewModel viewModel)
at System.Reflection.RuntimeConstructorInfo.InternalInvoke(Object , Object[] , Boolean )
at System.Reflection.RuntimeConstructorInfo.DoInvoke(Object , BindingFlags , Binder , Object[] , CultureInfo )
at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags , Binder , …Run Code Online (Sandbox Code Playgroud) CommunityToolkit.Mvvm我在 .NET MAUI 应用程序中实现自动完成功能,并在视图模型中使用代码生成器来处理可观察的属性。
我有以下代码,我正在尝试在更改GetSuggestions()时调用方法SearchText。
[ObservableProperty]
[NotifyCanExecuteChangedFor(nameof(GetSuggestions))]
string searchText;
[ObservableProperty]
bool showSuggestions;
ObservableCollection<string> Suggestions { get; } = new();
private async Task GetSuggestions()
{
if(string.IsNullOrEmpty(SearchText) || SearchText.Length < 3)
return;
var data = await _myApiService.GetSuggestions(SearchText.Trim());
if(data != null && data.Count > 0)
{
Suggestions.Clear();
foreach(var item in data)
Suggestions.Add(item);
ShowSuggestions = true;
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误:
[NotifyCanExecuteChangedFor] 的目标必须是可访问的 IRelayCommand 属性,但“GetSuggestions”在类型 MyViewModel 中没有匹配项。
我在这里做错了什么?
我正在使用 .net Maui MVVM 源生成器来创建属性作为可观察属性。我正在使用 System.Text.Json.Serialization 将类的属性序列化为 JSON。当我在某些属性上使用 [JsonIgnore] 时,它们仍然会序列化为 JSON。还有其他方法可以忽略属性吗?
我认为问题是我将装饰器放在私有属性声明上,而不是公共属性声明上,因为公共属性是在依赖项 -> 分析器 -> CommunityToolkit.Mvvm.SourceGenerators 中创建的。
c# data-binding json-serialization maui community-toolkit-mvvm
我正在 wpf mvvm 应用程序中工作,我也使用 Community toolkit.mvvm 。这里我为文本框实现了 Observable 验证器,但它不会影响用户界面,
视图模型:
public partial class UserViewModel : ObservableValidator
{
[ObservableProperty]
[Required(ErrorMessage ="Name is Required")]
[MinLength(3)]
private string name= "";
}
Run Code Online (Sandbox Code Playgroud)
XML:
<TextBox Text="{Binding Name,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
Run Code Online (Sandbox Code Playgroud)
当我在文本框中输入少于 3 个字符并保留它时,它不起作用,文本框接受每个范围内的字符,也接受空。