【问题标题】:Is there a simple way to empty my textbox after propertychanged in C#?在 C# 中更改属性后,是否有一种简单的方法可以清空我的文本框?
【发布时间】:2016-02-19 07:22:20
【问题描述】:

设置:我有一个 Windows 10 通用应用程序,当我单击一个按钮时,我会在其中向我的 ObservableCollection 添加一个任务。我使用中继命令来调用我的 Add 方法。

问题:即使我将任务设置为空,我的文本框也不同步。或者更确切地说,文本属性为空,但最后输入的文本仍然存在。我尝试实现INotifyPropertyChanged 并在设置Task=""; 无效后添加OnPropertyChanged();

我的添加方法

public async void AddTask()
{
    if (!string.IsNullOrEmpty(Task))
    {
        Tasks.Add(new Task(Task));
        Task = "";
    }
    else
    {
        MessageDialog dialog = new MessageDialog("Write something first.");
        await dialog.ShowAsync();
    }
}

我的 Xaml

<TextBox x:Name="TextInput"
PlaceholderText="Enter your task here."
HorizontalAlignment="Center" 
TextWrapping="Wrap" 
VerticalAlignment="Center" 
Height="Auto"
MinHeight="200"
MaxHeight="400"
Width="Auto"
MinWidth="100"
MaxWidth="600"
FontSize="40"
Text="{Binding Task, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

如果可能,我想尽可能简单地实现这一点,而不使用任何代码隐藏。

如果您需要更多信息或澄清,请写信。我会尽快回复。

【问题讨论】:

  • 您的任务属性是否实现了 INotifyPropertyChanged?
  • 哎呀。不,它没有。我认为可以在我的 Add 方法中添加它。现在我将它添加到我的任务设置器中,它起作用了。谢谢!如果你把你的回复写成答案,我会给你一张支票。
  • 不要使用async void,你不能用它处理异常,任何异常都会导致应用崩溃。请改用async Taskasync void 只能与异步事件处理程序调用一起使用
  • @Tseng 感谢您的提示。在这方面是新的。当我将 void 更改为 Task 时,我得到一个“Task”的返回类型错误。但我不需要返回任何值。在这种情况下我该怎么办?顺便说一句,将我自己的任务更改为 NextAction,因为我可以看到由于已经内置的任务,这不能很好地发挥作用。

标签: c# xaml mvvm data-binding win-universal-app


【解决方案1】:

如评论中所述,您的 Task 属性应实现 INotifyPropertyChanged 以通知 UI 您将 Task 重置为空字符串。没有 INPC,UI 不会更新。

【讨论】:

    猜你喜欢
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2012-06-29
    相关资源
    最近更新 更多