Я создаю пользовательский элемент управления, который использует таймер для подсчета времени и, наконец, запускает действие команды в модели представления.System.Timers.Timer Истекшая команда excute не работает с RelayCommand
Проблема
Когда время прошло, это запустить истекшее событие, а затем выполнить статическую команду.
Дело в том, что когда я нажимаю кнопку обновления, он может вводить RefreshCommand_Executed (ожидается). Тем не менее, он не может войти в эту функцию для срабатывания таймера, прошедшего экстренное событие, даже тогда запускается код в BeginInvoke ()) ...
Пожалуйста, помогите нам в этом.
Код
-CustomControl.xaml.cs
public partial class CustomControl : UserControl
{
public static ICommand ExecuteCommand = new RoutedCommand();
public CustomControl()
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.AutoReset = true;
timer.Interval = 60000.0;
timer.Elapsed += (sender, e) =>
{
this.Dispatcher.BeginInvoke(new Action(() =>
{
if (ExecuteCommand != null)
{
ExecuteCommand.Execute(sender);
}
}));
};
timer.Start();
}
private void ExecuteCommand_Executed(object sender, RoutedEventArgs e)
{
if (ExecuteCommand != null)
{
ExecuteCommand.Execute(sender);
}
}
}
-CustomControl.xaml
<UserControl ...skip...>
<Grid>
<Button x:Name="refreshButton"
Content="Refresh"
Click="ExecuteCommand_Executed" />
</Grid>
</UserControl>
-MainView.xaml
<UserControl ...skip...>
<UserControl.Resources>
<vm:MainViewModel x:Key="ViewModel" />
</UserControl.Resources>
<Grid cmd:RelayCommandBinding.ViewModel="{StaticResource ViewModel}">
<cmd:RelayCommandBinding Command="ctr:CustomControl.ExecuteCommand" CommandName="RefreshCommand" />
</Grid>
</UserControl>
-MainViewModel.cs
public class MainViewModel : NotifyPropertyChanged
{
private ICommand refreshCommand;
public ICommand RefreshCommand
{
get { return refreshCommand; }
set { if (value != refreshCommand) { refreshCommand = value; RaisePropertyChanged("RefreshCommand"); } }
}
public MainViewModel()
{
RefreshCommand = new RelayCommand(RefreshCommand_Executed);
}
void RefreshCommand_Executed(object o)
{
//code to run
}
}
Не имеет смысла заставить 'MainViewModel' отвечать за создание таймера и отвечать на срабатывание таймера? –
Я знаю, что это возможно, но моя цель - создать usercontrol ... – daniel