我遇到的问题是,无论我在条目控件中输入多少个字符,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);
}
正如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”也会相应更新。