在 .Net Maui 中使用 EventToCommandBehavior 的问题

问题描述 投票:0回答:1

我遇到的问题是,无论我在条目控件中输入多少个字符,Name 属性长度始终为 0。 TextChanged 事件正在触发,因为当我键入字符时,NameChanged RelayCommand 处的执行中断,但 Name 属性再次没有更改。我是不是错过了什么?

XAML

<Entry Placeholder="Enter Name" MaxLength="15">
    <Entry.Behaviors>
        <toolkit:EventToCommandBehavior
            EventName="TextChanged"
            Command="{Binding NameChangedCommand}" />
    </Entry.Behaviors>
</Entry>

视图模型

[ObservableProperty]
string _name=string.Empty;

[RelayCommand]
private void NameChanged()
{

if (Name.Length >=3)
   IsNameLengthValid=true;
else
   IsNameLengthValid=false;
}

[RelayCommand(CanExecute=nameof(IsNameLengthValid))]
async Task Submit()
{
await Toast.Make("Form Submitted").Show().ConfigureAwait(false);
}
c# maui maui-community-toolkit
1个回答
0
投票

正如Jason所说,代码中Entry的

Text
属性并没有绑定到ViewModel中的
_name
属性,所以可以参考以下xaml代码进行调整:

<Entry Placeholder="Enter Name" MaxLength="15" Text="{Binding Name}">

另外,在ViewModel中,在

[ObservableProperty]
中添加一个新的Name属性,并在其中设置相应的SetProperty和GetProperty:

[ObservableProperty]
string _name = string.Empty;

public string Name
{
     get => _name;
     set
     {
         SetProperty(ref _name, value);
     }
}

这样,当Entry中的文本发生变化时,ViewModel属性中的“_name”也会相应更新。

© www.soinside.com 2019 - 2024. All rights reserved.