如何使用RelayCommand在ViewModel中清空绑定的Entry输入文本
ViewModel清空绑定Entry输入文本的实现方案
功能核心逻辑依赖INotifyPropertyChanged接口的属性变更通知机制,ViewModel修改属性值后主动通知UI层更新,即可实现输入框内容的清空。
实现代码
XAML部分
按钮绑定Command,Entry绑定对应ViewModel属性即可:
<!-- 触发清空逻辑的按钮 --> <Button x:Name="AddQuestionToQuiz" WidthRequest="200" Command="{Binding CreateQuizCommand}" Style="{StaticResource ButtonStyle}" Text="Add question to quiz"> </Button> <!-- 绑定了ViewModel属性的输入框 --> <Entry Text="{Binding QuizQuestionInput, Mode=TwoWay}" Placeholder="请输入问题内容"/>
ViewModel部分
internal class CreateQuizPageViewModel : INotifyPropertyChanged { // 测验名称输入属性(如果不需要同步UI可以不加属性变更通知) public String QuizNameInput { get; set; } private String quizQuestionInput = ""; // 问题输入属性,赋值时触发变更通知 public String QuizQuestionInput { get => quizQuestionInput; set { quizQuestionInput = value; OnPropertyChanged(); } } public RelayCommand CreateQuizCommand { get; set; } public CreateQuizPageViewModel() { CreateQuizCommand = new RelayCommand(OnCreateQuizClick); } public event PropertyChangedEventHandler PropertyChanged; // 触发属性变更通知的方法 public void OnPropertyChanged(string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } // 按钮点击执行的逻辑 public void OnCreateQuizClick() { // 赋值为空后自动触发通知,UI同步清空输入框内容 QuizQuestionInput = ""; } }
注意事项
- 只有触发了
OnPropertyChanged通知的属性修改才会同步到UI层,不需要UI同步的属性可以省略通知逻辑 - 若使用CommunityToolkit.Mvvm库,可以继承
ObservableObject基类,配合[ObservableProperty]特性自动生成属性变更通知的代码,简化编写工作量
内容的提问来源于stack exchange,提问作者AntoBoy
相关产品推荐
相关产品推荐

