【发布时间】: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 Task。async void只能与异步事件处理程序调用一起使用 -
@Tseng 感谢您的提示。在这方面是新的。当我将 void 更改为 Task 时,我得到一个“Task”的返回类型错误。但我不需要返回任何值。在这种情况下我该怎么办?顺便说一句,将我自己的任务更改为 NextAction,因为我可以看到由于已经内置的任务,这不能很好地发挥作用。
标签: c# xaml mvvm data-binding win-universal-app