使用MVVM开发WPF应用程序,我已经达到了我已经得到了一个" save"可编辑数据网格上的按钮,用于幕后处理,但实际上并未更新UI中的任何内容,因此用户无法知道保存是否成功。
我对WPF很陌生,我认为会有一个简单的Flash消息控件,可以用来通知用户成功,然后在没有他们必须做任何事情的情况下逐渐消失。但似乎香草WPF中没有任何东西可以做到这一点,而且似乎也没有很多自定义解决方案。
我不想使用任何类型的消息框,因为它会强制用户采取措施来解除警报 - 我需要一些能够在不干扰其工作流程的情况下快速闪烁消息的内容。我之后有点像JavaScript Toastr库 -
http://codeseven.github.io/toastr/demo.html
任何人都可以指出我现有的控制权,或者我可能会从哪一处开始构建一个?
答案 0 :(得分:2)
我认为您不需要任何第三方控件。您始终可以创建自定义控件,将其粘贴到布局中,并将布局可见性属性绑定到视图模型。另一种选择是使用 StatusBar 来通知Word或VisualStudio中的客户端。有一个简短的例子:
xaml中的某个地方:
// ..
<StatusBar DockPanel.Dock="Bottom">
<StatusBarItem>
<Label Content="{Binding Message}"></Label>
</StatusBarItem>
</StatusBar>
// ..
代码中的某处(我喜欢在WPF中使用async / await):
// ..
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
// ..
StatusBarViewModel :
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));
}
}
答案 1 :(得分:1)
我在WPF中执行关于处理结束的简单通知的方法是显示工具提示。您可以从代码中打开工具提示:
https://stackoverflow.com/a/1911721/3391743
ToolTip tooltip = new ToolTip{ Content = "My Tooltip" };
NameTextBox.ToolTip = tooltip;
tooltip.IsOpen = true;
然后你可以像这里一样使用计时器: https://stackoverflow.com/a/1091753/3391743
对于IImplementPropertyChanged,在Fody Property Changed程序集中有一个很好的属性[PropertyChanged]可以通过NuGet获得,它可以为你完成所有的管道工作。
在此查看有关Fody的参考:https://github.com/Fody/PropertyChanged
答案 2 :(得分:0)
您可以使用&#34; NotifyIcon&#34;来自hardcodet以在WPF中实现类似Toast的通知。
另外,为了让您的UI更新,绑定引擎需要知道什么时候发生了变化。在.NET中,INotifyPropertyChanged
界面用于此目的,您需要在更改时在UI中更新的成员上实现该目标。
答案 3 :(得分:0)
您要问的是几个部分:
async
/await
。IInteractionRequest
实现。这是一个很好的example代码项目文章,讨论如何使用Microsoft Prism框架执行此操作,但是如果您不使用该框架,则可以调整代码以适合您。