使用 MVVM 开发 WPF 应用程序时,我在可编辑的数据网格上有一个“保存”按钮,该按钮在后台处理但实际上并没有更新 UI 中的任何内容,因此用户无法知道保存已成功。
我对 WPF 很陌生,我认为会有一个简单的 Flash 消息控件,可以用来通知用户成功,然后消失而无需他们做任何事情。但似乎 Vanilla WPF 中没有任何东西可以做到这一点,而且似乎也没有很多自定义解决方案。
我不想使用任何类型的消息框,因为它会强制用户采取行动来解除警报 - 我需要一些能够在不干扰他们的工作流程的情况下快速闪烁消息的东西。我在追求一些类似于 JavaScript Toastr 库的东西——
http://codeseven.github.io/toastr/demo.html
谁能指出我现有的控件,或者我可以从哪里开始构建一个?
最佳答案
我认为您不需要任何第三方控件。您始终可以创建自定义控件,将其粘贴到布局中并绑定(bind)布局 知名度 属性到您的 View 模型。另一种选择是使用 状态栏 在 Word 或 VisualStudio 中通知客户。有一个简单的例子:
xaml 中的某处:
// ..
<StatusBar DockPanel.Dock="Bottom">
<StatusBarItem>
<Label Content="{Binding Message}"></Label>
</StatusBarItem>
</StatusBar>
// ..
在您的代码中的某处(我喜欢将 async/await 与 WPF 一起使用):
// ..
statusBarViewModel.Message = "Processing the file..."; // assumed that you bind this view model to the view
await DoWork(); // do much work
await statusBarViewModel.ShowMessageAndHide("File saved"); // show final message and hide it after some time
// ..
和状态栏 View 模型 :
public class StatusBarViewModel : INotifyPropertyChanged
{
private string message = string.Empty;
public string Message
{
get { return message; }
set
{
if (value == message) return;
message = value;
OnPropertyChanged();
}
}
public async Task ShowMessageAndHide(string message)
{
Message = message;
await Task.Delay(5000);
Message = string.Empty;
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
关于c# - WPF 快速通知控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22530728/