标签: community-toolkit-mvvm

无法使用 CommunityToolkit.Mvvm 在视图模型中使用 ICommand 属性

在我的视图模型中,我想使用 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)

c# mvvm community-toolkit-mvvm

14
推荐指数
2
解决办法
8458
查看次数

MAUI 应用程序在发布模式下无法工作,但在调试模式下完美工作

我的 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)

c# maui community-toolkit-mvvm

10
推荐指数
3
解决办法
7428
查看次数

使用 CommunityToolkit.Mvvm 当 ObservableProperty 更改时调用方法

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 中没有匹配项。

我在这里做错了什么?

c# observablecollection community-toolkit-mvvm

7
推荐指数
1
解决办法
7631
查看次数

除了使用 [JsonIgnore] 装饰器之外,还有其他方法可以在 JSON 序列化期间忽略属性吗?

我正在使用 .net Maui MVVM 源生成器来创建属性作为可观察属性。我正在使用 System.Text.Json.Serialization 将类的属性序列化为 JSON。当我在某些属性上使用 [JsonIgnore] 时,它们仍然会序列化为 JSON。还有其他方法可以忽略属性吗?

我认为问题是我将装饰器放在私有属性声明上,而不是公共属性声明上,因为公共属性是在依赖项 -> 分析器 -> CommunityToolkit.Mvvm.SourceGenerators 中创建的。

在此输入图像描述

c# data-binding json-serialization maui community-toolkit-mvvm

4
推荐指数
1
解决办法
909
查看次数

可观察验证器在 wpf 中不起作用

我正在 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 个字符并保留它时,它不起作用,文本框接受每个范围内的字符,也接受空。

c# wpf desktop-application mvvm community-toolkit-mvvm

1
推荐指数
1
解决办法
1286
查看次数