CommunityToolkit.Mvvm.Input.RelayCommand не работает на iOS (MAUI .NET 8.0)?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 CommunityToolkit.Mvvm.Input.RelayCommand не работает на iOS (MAUI .NET 8.0)?

Сообщение Anonymous »

У меня проблема с неработающим RelayCommand (CommunityToolkit.Mvvm.Input.RelayCommand) в iOS в приложении .NET 8.0 MAUI. Эта RelayCommand почему-то не срабатывает в iOS, хотя работает в Windows и Android. Это происходит в приложении MVVM .NET 8.0 MAUI, предназначенном для Android, Windows и iOS.
Для начального экрана я использую ViewModel, в конструкторе которого определены эти RelayCommands:< /p>

Код: Выделить всё

ChangeSettingsCommand = new CommunityToolkit.Mvvm.Input.RelayCommand(OnChangeSettings, CanChangeSettings);
ChangeSettingsCommand.NotifyCanExecuteChanged();
В ViewModel методы OnChangeSettings и CanChangeSettings следующие:

Код: Выделить всё

 public CommunityToolkit.Mvvm.Input.RelayCommand ChangeSettingsCommand { get; set;  }

public bool CanChangeSettings(object paramater)
{
return true;
}

#endregion

internal void OnChangeSettings(object parameter)
{
ChangeSettingsEvent?.Invoke(this, new EventArgs());
}
Метод OnChangeSettings вызывает событие, определенное в представлении (...xaml.cs):

Код: Выделить всё

moLogin.ChangeSettingsEvent += MoLogin_ChangeSettingsEvent;

private async void MoLogin_ChangeSettingsEvent(object sender, EventArgs e)
{
await Utils.PushAsyncWithoutDuplicate(new InitialSettingsNew(true));
}
В представлении команда «установлена» на такую ​​кнопку (moLogin — это ViewModel):

Код: Выделить всё

  lst.Add(new Controls.Phone.PBImageButton()
{
Command = moLogin.ChangeSettingsCommand,
//BindingContext = moLogin,
//ButtonImageFile = Utils.OnPlatform("Toolbar/settingswhite.png", "settingswhite.png", "Images/White/settings.png"),
Source = "w_settings.png",
//Behaviors.Add(behavior),
BackgroundColor = Colors.Transparent,
ButtonBorderColor = Colors.Transparent,
VerticalOptions = LayoutOptions.Center,
HorizontalOptions = LayoutOptions.Center,
HeightRequest = 40,
WidthRequest = 40

});
В конструкторе PB ImageButton (пользовательский элемент управления, производный от ImageButton ) ICommand задается следующим образом:

Код: Выделить всё

public PBImageButton()
{
this.CornerRadius = 0;
this.BackgroundColor = Colors.Transparent;
this.Padding = new Thickness(5);

SetupGrid();

TapGestureRecognizer t = new TapGestureRecognizer();

this.GestureRecognizers.Add(new TapGestureRecognizer()
{
Command = ExecuteCommand
});

}
Свойство ExecuteCommand (ICommand) PBImageButton выглядит следующим образом:

Код: Выделить всё

private ICommand ExecuteCommand
{
get
{
return new Command(async () =>
{
if (this.IsEnabled)
{
await this.ScaleTo(0.8, 50, Easing.Linear);
await Task.Delay(100);
await this.ScaleTo(1, 50, Easing.Linear);

PBImageButtonClicked?.Invoke(this, new EventArgs());
this.Command?.Execute(CommandParameter);
}
}
);
}
}
Если я устанавливаю точку останова в методе: OnChangeSettings в ViewModel, эта точка останова срабатывает в Windows и Android, но в iOS этот метод не запускается.
Таким образом, каким-то образом команда PBImageButton (свойство System.Windows.Input.ICommand) не работает в iOS.
Я уже пробовал решить эту проблему следующим образом:
1.
Похоже, причина в этом:
https://github.com/CommunityToolkit/Maui/issues /2065

Если перед именем RelayCommand стоит префикс «On», команда
никогда не будет запущена.

Удаление «Вкл..» не помогло.
2.
Используйте Атрибут RelayCommand (вместо определения RelayCommand в самом C#):

Код: Выделить всё

[RelayCommand]
internal void ChangeSettings(object parameter)
{
ChangeSettingsEvent?.Invoke(this, new EventArgs());
}
Это тоже не помогло.
3.
Использование:
https://www.reddit.com/r/dotnetMAUI/com ... ?rdt=51962

Код: Выделить всё

        ChangeSettings = new CommunityToolkit.Mvvm.Input.RelayCommand(OnChangeSettings, CanChangeSettings);
ChangeSettings.NotifyCanExecuteChanged();
Вместо:

Код: Выделить всё

        ChangeSettingsCommand = new CommunityToolkit.Mvvm.Input.RelayCommand(OnChangeSettings, CanChangeSettings);
ChangeSettingsCommand.NotifyCanExecuteChanged();
Это не решило проблему.
4.
Когда Я напрямую использую PBImageButton с привязкой команды в представлении.......: Он работает на Windows и Android, но не на iOS. Это тоже не решение.
5.
Использование в методе «public» вместо «internal». ниже:

Код: Выделить всё

 public void OnChangeSettings(object parameter)
{
ChangeSettingsEvent?.Invoke(this, new EventArgs());
}
Однако это тоже не решило проблему.

Я думаю, что это может быть проблема, связанная с .NET. 8.0, потому что я использовал тот же код в другом приложении MAUI, которое работает с MAUI .NET 7.0, и здесь этой проблемы не возникло.
Кто-нибудь знает, есть ли известные проблемы с iOS и .NET 8.0, касающиеся RelayCommand (CommunityToolkit.Mvvm.Input.RelayCommand)?
Кто-нибудь знает, что здесь не так? Возможно, я упускаю из виду что-то очевидное.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ui-net-8-0
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • CommunityToolkit.Mvvm.Input.RelayCommand не работает на iOS (MAUI .NET 8.0)?
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • CommunityToolkit.Mvvm.Input.RelayCommand не работает на iOS (MAUI .NET 8.0)?
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Является ли .net Maui Communitytoolkit.mvvm icommand плохая практика в ViewModel в .net maui? [закрыто]
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • CommunityToolKit.Mvvm 8.4.0 и предупреждение MVVM Toolkit MVVMTK0045
    Anonymous » » в форуме C#
    0 Ответы
    68 Просмотры
    Последнее сообщение Anonymous
  • CommunityToolkit.mvvm 8.4.0 и MVVM Toolkit Warning Mvvmtk0045
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»