我正在尝试在 MVVM 项目中实现一个通知图标(http://www.hardcodet.net/projects/wpf-notifyicon)。我了解此控件旨在用于常规 WPF 项目。
我想知道如何实现气球功能(气球功能)。如本教程中所述,需要调用方法“ShowBallonTip”
//show balloon with built-in icon
MyNotifyIcon.ShowBalloonTip(title, text, BalloonIcon.Error);
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一可以调用此方法的地方是在后面的代码中。我在后面的视图代码中有一点代码没有问题(即使我不想有任何代码)但我不知道如何让视图模型与视图对话并要求它调用这个方法。
即使我将此方法放在一个事件中,我如何从视图模型以编程方式引发此事件?
知道我怎么能做到这一点吗?
我已经能够通过初始化视图模型中的图标而不是 XAML 来显示气球提示。
只需在我的命令中调用 ShowBalloonTip 方法即可解决问题。
我为通知图标创建了一个包装器:NotifyService:
public class NotifyService : INotifyService
{
private TaskbarIcon icon = new TaskbarIcon
{
Name = "NotifyIcon",
Icon =
new System.Drawing.Icon(
Application.GetResourceStream(Utils.FileUtils.MakeUri("/Icons/email.ico")).Stream),
};
public void Notify(string message)
{
icon.ShowBalloonTip("title", message, BalloonIcon.None);
}
public void ChangeIconSource(string path)
{
icon.Icon = new System.Drawing.Icon(
Application.GetResourceStream(Utils.FileUtils.MakeUri(path)).Stream);
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的视图模型中使用了它:viewmodel
public class MainWindowViewModel : WindowViewModelBase
{
private readonly INotifyService notifyService = new NotifyService();
#region Fields
private static HomeWindowViewModel homeViewModel = new HomeWindowViewModel();
#endregion
/// Initializes a new instance of the <see cref="MainWindowViewModel"/> class.
/// </summary>
public MainWindowViewModel()
: base()
{
CurrentViewModel = homeViewModel;
}
#region Methods
protected override void OnViewModelPropertyChanged(IViewModel viewModel, string propertyName)
{
int t = 2;
}
protected override void OnViewModelCommandExecuted(IViewModel viewModel, ICatelCommand command, object commandParameter)
{
int t = 2;
notifyService.ChangeIconSource(@"/Icons/new_email.ico");
notifyService.Notify("test");
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4037 次 |
| 最近记录: |