Инструментарий сообщества MAUI EventToCommandBehavior
Я отчаянно пытаюсь придерживаться шаблона проектирования MVVM в своем приложении. Поэтому я пытаюсь использоватьEventToCommandBehavior
поведение от MCT. (Я также использую CommunityToolkit.Mvvm для[RelayCommand]
) я приложил его кEntry
и я пытаюсь переслать событие TextChanged моей команде. Однако моя команда не выполняется.
XAML:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Class="MyApp.View.Accounts.AddAccountPage"
xmlns:viewmodel="clr-namespace:MyApp.ViewModel.AccountsViewModel"
Title="Add Account">
<VerticalStackLayout>
<Entry x:Name="entryAccountName"
Placeholder="Account Name"
PlaceholderColor="Black"
TextColor="{StaticResource Tertiary}"
BackgroundColor="{StaticResource Primary}"
WidthRequest="125"
HorizontalOptions="Center"
Keyboard="Text"
ClearButtonVisibility="WhileEditing"
ReturnType="Next">
<Entry.Behaviors>
<toolkit:EventToCommandBehavior
EventName="TextChanged"
Command="{Binding AccountTextChangedCommand}" />
</Entry.Behaviors>
</Entry>
....More XAML....
Код AccountsViewModel:
[RelayCommand]
public void AccountTextChanged()
{
Application.Current.MainPage.DisplayAlert("Text changed", "Account Text Changed", "OK");
}
У меня есть точка останова, установленная для метода, и она просто никогда не вызывается. Любые идеи относительно того, что я делаю неправильно?
1 ответ
Я наконец-то понял. Я забыл установить BindingContext в AccountsViewModel в конструкторе страницы:
using MyApp.Services;
using MyApp.ViewModel.AccountsViewModel;
namespace MyApp.View.Accounts;
public partial class AddAccountPage : ContentPage
{
public AddAccountPage()
{
InitializeComponent();
DataService dataService = new();
AccountsViewModel accountsViewModel = new(dataService);
BindingContext = accountsViewModel;
}
}
Мне приходилось устанавливать BindingContext через конструкторы на разных страницах, чтобы привязки данных работали, хотя я ссылаюсь на ViewModels в заголовке XAML. Это так задумано или я ошибаюсь?