gpt4 book ai didi

c# - 来自 ViewModel 和 DispatchTimer 的 RelayCommand

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:06 26 4
gpt4 key购买 nike

下午好

我正在尝试在 View 模型中触发 ICommand...从 View 模型,而不是从 UI。

该命令在 UI xaml 中运行良好,但是,在这个不同的场景中,它却不能。

private DispatcherTimer telTimer;

public RelayCommand StartT_Command { get { return new RelayCommand(Exe_StartT_Command); } }

void Exe_StartT_Command(object parameter)
{
if (telTimer != null && telTimer.IsEnabled)
{
telTimer.Stop();
return;
}
telTimer = new DispatcherTimer();
telTimer.Tick += new EventHandler(TelTimerTick);
telTimer.Interval = new TimeSpan(0, 0, 0, 0, 10);
telTimer.Start();
}

private void TelTimerTick(object sender, EventArgs e) //Every Tick
{
Data.Te(Td);
}

就像我说的,它在 UI 上运行良好,但是,当被调用时(见下文),它会一直运行到 telTimer.Start();然后……没有。

void KeyDown(int vKey)
{
if (vKey == 0x6A) //Num Pad * Key
{
this.StartT_Command.Execute(null);
}
}

有什么想法吗??

提前致谢。

EDIT1:我检查了 .IsEnabled,并且启用了计时器。但是,TelTimerTick() 没有运行。

EDIT2:我没有提到 KeyDown 是从不同的线程调用的。这会对命中 TelTimerTick() 的事件产生影响吗?

最佳答案

我不太确定我是否遵循,但如果你只是想从你的 View 模型调用一些命令?

正如 MvGarnagle 在他的回答中指出的那样,您每次都在分配一个新命令,执行他所做的或:

private ICommand startCommand;
public ICommand StartTCommand
{
get { return startCommand ?? (startCommand = new RelayCommand(ExeStartTCommand)); }
}

编辑 DispatcherTimer telTimer;//未分配 无效 ExeStartTCommand() { //可能为空 如果 telTimer!=null && telTimer.IsEnabled) { telTimer.Stop(); 返回; } telTimer = new DispatcherTimer(); telTimer.Tick += TelTimerTick; telTimer.Interval = new TimeSpan(0, 0, 0, 0, 10); telTimer.Start();

private void TelTimerTick(object sender, EventArgs e) //Every Tick
{
Data.Te(Td);
}

在您的 View 模型中直接调用 ExeStartTCommand,不要触发命令,没有必要。现在,如果这是一个类似于自定义控件的 DO,您将不得不触发命令,以便使用控件的 View 将使用这些命令或更常见的路由事件。

编辑:

现在是代码

// how is this hooked up? W32 wrap?
void KeyDown(int vKey)
{
if (vKey == 0x6A) //Num Pad * Key
// Have the dispatchers in your viewmodelbaseclass, this is just for simplicity
App.Current.Dispatcher.BeginInvoke(new Action(ExeStartTCommand));
}

你真的应该在你的基类中有一个 Dispatcher 设置为你希望它运行的调度程序,并使用该属性而不是上面的属性。如果您正在处理线程问题,我需要您提供更多背景信息,这里有点摸不着头脑:)

干杯,

斯蒂安

关于c# - 来自 ViewModel 和 DispatchTimer 的 RelayCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25694618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com