Созданная CommunityToolkit команда OnSelectionChanged не работает?
Мой проект используетCommunityToolkit.Mvvm
8.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}"/>