Созданная CommunityToolkit команда OnSelectionChanged не работает?

Мой проект используетCommunityToolkit.Mvvm8.0.

я использую[RelayCommand]атрибут для создания метода генерации команды.

https://learn.microsoft.com/en-us/dotnet/communitytoolkit/mvvm/generators/обзор

ПочемуClickработает нормально, ноOnSelectionChangedне работает?

Код:

        <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
       
        <TextBlock Text="{Binding FirstName}"/>
        <Button Content="Click Me" Command="{Binding OnSelectionChangedCommand}"/>
        <Button Content="Click Me"  Command="{Binding ClickCommand}"/>
    </StackPanel>

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;

 public partial class MainWindow : Window
  {
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new ViewModel();
    }
  }
    public partial class ViewModel : ObservableObject
        {
            [ObservableProperty]
            private string firstName = "Kevin";
    
            public ViewModel()
            {
            }
    
            [RelayCommand]
            private void OnSelectionChanged()
            {
                FirstName = "David";
            }
            [RelayCommand]
            private void Click()
            {
                FirstName = "David";
            }
        }

2 ответа

Согласно атрибуту RelayCommand , «On» в начале имени метода будет удалено из автоматически сгенерированной команды.

Генератор будет использовать имя метода и добавит «Command» в конце, а также удалит префикс «On», если он присутствует.

Таким образом, имя команды будетSelectionChangedCommand.

Когда вы украшаете метод с помощьюRelayCommandAttribute, анICommandсоздается свойство, и имя этого сгенерированного свойства будет именем метода с добавлением «Command» в конце.

Как ясно сказано в документах , префикс «Вкл.» также будет удален из сгенерированного имени свойства.

Таким образом, ваш пример кода работает просто отлично, если вы просто удалите часть «On» из разметки XAML, поскольку нет сгенерированной команды с именем « On SelectionChangedCommand»:

      <Button Content="Click Me" Command="{Binding SelectionChangedCommand}"/>
Другие вопросы по тегам