Entry控件如何配合MVVM自动生成方法实现回车触发?
解决方案:Entry绑定ViewModel时延迟触发属性变更逻辑
这不是CommunityToolkit.Mvvm不支持该场景,而是默认的绑定更新时机导致的——Entry的Text绑定默认会在每次文本变更时就更新ViewModel的属性,所以OnNameChanged会频繁触发。要实现失去焦点或按Enter时才触发逻辑,有两种MVVM友好的实现方式:
方案一:修改绑定的更新触发时机
将绑定的UpdateSourceTrigger设置为LostFocus,这样只有当Entry失去焦点(比如点击界面其他区域)时,才会把输入的文本同步到ViewModel的Name属性,进而触发OnNameChanged方法。
修改后的XAML代码:
<VerticalStackLayout> <Entry Placeholder="Enter a string value." Text="{Binding Name, UpdateSourceTrigger=LostFocus}"/> </VerticalStackLayout>
方案二:结合Enter键触发逻辑
如果需要支持用户按下Enter键时立即执行逻辑,可以利用Entry的Completed事件,绑定到ViewModel中的命令,同时搭配方案一的更新时机设置。
ViewModel代码修改
public partial class CheckboxMethodPageViewModel : ObservableObject { [ObservableProperty] private string name; partial void OnNameChanged(string value) { // 此处编写失去焦点时需要执行的逻辑 // throw new NotImplementedException(); } [RelayCommand] private void OnEntryCompleted() { // 此处编写按下Enter键时需要执行的逻辑 // 若需要,也可在此处手动触发属性变更相关操作 } }
XAML代码修改
<VerticalStackLayout> <Entry Placeholder="Enter a string value." Text="{Binding Name, UpdateSourceTrigger=LostFocus}" CompletedCommand="{Binding OnEntryCompletedCommand}"/> </VerticalStackLayout>
若要同时支持失去焦点和Enter键触发逻辑,将上述两个方案结合即可——LostFocus保证点击别处时同步数据,CompletedCommand处理Enter键的即时触发。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

