- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我在 TimerOnElapsed
方法中调用 PressCommand.RaiseCanExecuteChanged();
时,没有任何反应。
可能是什么问题?(GalaSoft.MvvmLight.WPF4 v4.0.30319 和 GalaSoft.MvvmLight.Extras.WPF4 v4.0.30319)
这是我的测试代码:
using System.Timers;
using System.Windows;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
namespace CommandTest {
public class MainWindowVM : ViewModelBase {
public MainWindowVM() {
PressCommand = new RelayCommand(
() => MessageBox.Show("Pressed"),
() => _canExecute);
PressCommand.CanExecuteChanged += (sender, args) => System.Diagnostics.Debug.WriteLine(System.DateTime.Now.ToLongTimeString() + " CanExecuteChanged");
_timer = new Timer(1000);
_timer.Elapsed += TimerOnElapsed;
_timer.Enabled = true;
}
public RelayCommand PressCommand { get; private set; }
#region Private
private void TimerOnElapsed(object sender, ElapsedEventArgs elapsedEventArgs) {
_canExecute = !_canExecute;
PressCommand.RaiseCanExecuteChanged();
System.Diagnostics.Debug.WriteLine("At {0} enabled: {1}", elapsedEventArgs.SignalTime.ToLongTimeString(), _canExecute);
}
private readonly Timer _timer;
private bool _canExecute;
#endregion
}
}
提前致谢
最佳答案
解释:
TimerOnElapsed
方法在工作线程上运行,但要调用 PressCommand.RaiseCanExecuteChanged();
必须在 UI 线程上。
这就是解决方案,更新后的 TimerOnElapsed
方法:
private void TimerOnElapsed(object sender, ElapsedEventArgs elapsedEventArgs) {
_canExecute = !_canExecute;
Application.Current.Dispatcher.Invoke(PressCommand.RaiseCanExecuteChanged);
System.Diagnostics.Debug.WriteLine("At {0} enabled: {1}", elapsedEventArgs.SignalTime.ToLongTimeString(), _canExecute);
}
关于mvvm-light - 为什么不工作 : RelayCommand RaiseCanExecuteChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12876324/
下面是一个很简单的Prism.Wpf以 DelegateCommand 为例两者都有Execute和 CanExecute代表。 假设 CanExecute取决于某些属性。看来 Prism 的Dele
我正在使用几个绑定(bind)到 RelayCommands 的 Buttons,这些 RelayCommands 是用 CanExecute 委托(delegate)初始化的。 RelayComma
我正在使用 PRISM 的 WPF 和 DelegateCommand 并遇到以下问题: 我开始一个异步操作,例如: public async void ProgramDevice() { v
当我在 TimerOnElapsed 方法中调用 PressCommand.RaiseCanExecuteChanged(); 时,没有任何反应。 可能是什么问题?(GalaSoft.MvvmLigh
我正在使用 Nuget (4.1.23.0) 上可用的当前版本的 MvvmLight,调用 RaiseCanExecuteChanged 似乎在单元测试中没有做任何事情。场景很简单,我有一个命令: p
更新 上传的示例项目:https://github.com/subt13/BugSamples 我重现了一个在使用 MVVMLight 框架的 Windows 10 UAP 应用程序中发生的错误。 当
我正在使用 MVVM 模式。我是我的观点,我有个人详细信息的文本框,其中之一是 idBox。此外,该 View 由几个按钮组成,其中之一是 editModeBtn。 我希望只有在 idBox 中有一个
我绝对有没有知道是什么原因造成的。 背景:使用 Prism 框架 I have a button bound to a DelegateCommand I call RaiseCanExecuteCh
我正在尝试确定使ICommands的CanExecute()反映在UI中的最佳方法。 我知道Dispatcher是处理UI绘图的WPF(引擎?),默认情况下,Dispatcher会在实例化以及活动用户
在我的 WPF 应用程序中,我有一种节点图。我已经向这些节点添加了一个 ContextMenu,当我右键单击内容等时会出现。 上下文菜单中的命令来自具有 DelegateCommands 的服务 (M
我的 ViewModel 中有这样的东西: public enum WorkState { Idle, Working, Stopping }; public class MainViewMo
我刚刚从 Prism 4.1 更新到 5,以前工作正常的代码现在抛出 InvalidOperationExceptions。我怀疑根本原因是更新的异步 DelegateCommand 没有正确编码到
我有一个文本框和一个绑定(bind)到我的 View 模型中的属性的按钮,如下所示 我的用户名属性: private string userName; public string
我正在使用 Prism 和 MVVM 开发 WPF 应用程序。 应用程序的要求之一是能够以不同的用户身份(具有不同的权限)登录。 现在大多数权限都是简单的允许或禁止显示特定 View 。所有这些都实现
我是一名优秀的程序员,十分优秀!