Я сталкиваюсь с какой-то довольно уникальной проблемой связывания «таймингов», в которой я не уверен, как обойти.
Характеристики:
- Язык: NetCore 3.1
- Тип: WPF
- Формат: MVVM
I ' m, используя http://www.hardcodet.net/wpf-notifyicon, чтобы помочь с обработкой иконки системной задачи и ее меню левой кнопкой мыши.
Я использую пример https://github.com/hardcodet/wpf-notifyicon/tree/master/Hardcodet.NotifyIcon.Wpf/Source/Windowless%20Sample в качестве руководства по настройке ресурсов словаря и тому подобное.
Таким образом, я связываюсь с помощью:
(SystemTrayResources.xaml)
<MenuItem Header="Start" Command="{Binding Path = StartCommand}"/>
<MenuItem Header="Pause" Command="{Binding Path = PauseCommand}" />
<MenuItem Header="Disconnect" Command="{Binding Path = StopCommand}" />
, который в данный момент выполняет ICommand
в моей модели просмотра.
Проблема, с которой я столкнулся в том случае, если я просто выполняю обычный прогон, он не оценивает, сможет ли он отключить какой-либо из элементов, и ни одна из команд не работает, то же самое происходит, если я отлаживаю, без каких-либо остановок или проверок. Но когда я ставлю его на паузу, когда объект сделан и установлен, и углубляюсь в TaskbarIcon.CommandBindings
, а затем продолжаю работать, он работает!
Так что что-то в этой привязке и при указании ее установки происходит "слишком быстро" это все, что я могу сказать. Я пытался сделать await через:
(SystemTrayService.cs)
public async void SetTaskBar(TaskbarIcon taskbar)
{
await Task.Run(() =>
{
Taskbar = taskbar;
});
}
И я использую инъекцию зависимости:
(App.xaml.cs)
private void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ISystemTrayService>(icon => new SystemTrayService());
....
}
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
ISystemTrayService systemtray = ServiceLocator.Current.GetInstance<ISystemTrayService>();
systemtray.SetTaskBar((TaskbarIcon) FindResource("SystemTray"));
if (systemtray.Taskbar.CommandBindings == null)
{
throw new Exception("Data Context for taskbar menu not set!");
}
...
}
Любая помощь будет оценена, так как я не вижу никакой ждать или событие, чтобы увидеть, когда данные были связаны