- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
下午好
我正在尝试在 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/
在我的 iPad 应用程序中,我试图让 tableView 以预定的间隔滚动。为此,我创建了一段代码,为每个滚动创建一个闭包。然而,关闭的执行时间比我想要的时间晚了几秒钟。这是一个简化的 Playgr
我正在处理一些旧代码。以下是我无法转换或无法理解的两行(旧代码): let dispatchTime = dispatch_time(dispatch_time_t(DispatchTime.now(
我正在为 WP7 开发一个骰子游戏,该游戏每回合涉及多次掷骰。在轮到 CPU 时,我需要减慢进程,以便用户可以看到发生了什么。仔细研究后,我发现可以通过这种方式使用 DispatchTimer。 问题
DispatchTime.now() 到底发生了什么 为什么我不能将等待时间分配为变量? 我如何使用变量? 给定错误>>> Binary operator '+' cannot be applied
我正在尝试使用调度计时器测量按键事件之间耗时(以毫秒为单位),但是当声明调度计时器具有 1 毫秒的间隔然后建立滴答事件时,它不会每 1 毫秒触发一次,而是在某处触发像 10-100 毫秒(猜测)。如果
我正在使用 DispatchTime.now() 来测量事件之间耗时。有时它工作正常,但有时它生成的值远低于我的预期。 我目前的使用情况: var t = DispatchTime.now() var
下午好 我正在尝试在 View 模型中触发 ICommand...从 View 模型,而不是从 UI。 该命令在 UI xaml 中运行良好,但是,在这个不同的场景中,它却不能。 private Di
我正在尝试为 Swift4 中的计时器设置可变时间延迟,但是当我输入变量时,出现错误: Binary operator '+' cannot be applied to operands of typ
我试图在 Swift4 中创建一个由变量控制的计时器,唯一的问题是我收到错误: Cannot convert value of type 'UInt64' to expected argument t
我是一名优秀的程序员,十分优秀!