ICommand在使用MVVMLight框架的Loaded事件中没有绑定

时间:2016-10-14 00:47:29

标签: mvvm icommand

我想知道为什么在WPF页面中的Loaded事件中绑定一个按钮不起作用,只有在导航到另一个页面并返回后才能工作。

我有一个库存应用程序,在主页面上,大多数ViewModel都被调用,因为返回到特定列表的后退按钮以及原因是,即使该命令不是为了,它也会开始绑定该页面,它还将加载其他页面的集合。

所以我使用Loaded页面事件来调用填充列表的必要方法,并开始为这个特定页面启动绑定命令。我还使用Unloaded页面事件进行清理,例如取消订阅某些CRUD事件。

现在的问题是,按钮在Loaded页面事件中没有绑定。我不知道为什么..

我制作了一个微型应用来演示这个问题。它可以在这里下载 (包括完整源代码) https://www.dropbox.com/s/qzumzyicuvrktsi/ICommandTest.zip?dl=0 enter image description here

1 个答案:

答案 0 :(得分:1)

这是因为您的观点未收到有关Command_ShowAddWindowCommand_ClickMe更改的通知。让我解释一下:

首次运行Page构造函数时,会初始化对命令的绑定并将其传输到视图,但到那时您的命令为null,因此视图会将两个按钮的命令绑定到{ {1}}。

然后,当您的null事件被触发时,命令被初始化,但是视图没有得到关于它的通知,因此它将命令绑定到Loaded

问题的解决方案是:

您手动调用null以在初始化时通知视图有关命令更改的信息:

RaisePropertyChanged

或者在初始化 DataBindings之前在ViewModel构造函数中初始化命令:

void InitCommands()
{
    Command_ShowAddWindow = new RelayCommand(Command_ShowAddWindow_Click);
    Command_ClickMe = new RelayCommand(Command_ClickMe_Click);
    RaisePropertyChanged("Command_ShowAddWindow");
    RaisePropertyChanged("Command_ClickMe");
}