ICommand 未使用 MVVMLight 框架绑定到 Loaded 事件中
ICommand not binding in Loaded event using MVVMLight framework
我想知道为什么在 WPF 页面的 Loaded 事件中绑定按钮不起作用,只有在导航到另一个页面并返回后才会起作用。
我有一个清单应用程序,在主页上,大多数 ViewModel 都被调用,因为返回到特定列表的后退按钮是什么原因,它会开始绑定,即使该命令是不适用于该页面,它还会加载其他页面的集合。
所以我使用 Loaded 页面事件调用必要的方法来填充列表,并开始为这个特定页面绑定命令。我还使用 Unloaded 页面事件进行清理,例如取消订阅某些 CRUD 事件。
但现在的问题是,按钮没有在加载页面事件中绑定。不知道为什么..
我做了一个微型应用程序来演示这个问题。可以在这里下载
(包括完整的源代码)
https://www.dropbox.com/s/qzumzyicuvrktsi/ICommandTest.zip?dl=0
这是因为您的视图没有收到有关 Command_ShowAddWindow
和 Command_ClickMe
更改的通知。让我解释一下:
当您的 Page
构造函数是第一个 运行 时,您的命令的绑定将被初始化并传输到视图,但到那时您的命令是 null
,因此视图绑定两个按钮的命令 null
.
然后,当您的 Loaded
事件被触发时,命令会被初始化,但视图不会收到通知,因此它会将命令绑定到 null
。
问题的解决方案是:
您在初始化命令时手动调用 RaisePropertyChanged
通知视图命令更改:
void InitCommands()
{
Command_ShowAddWindow = new RelayCommand(Command_ShowAddWindow_Click);
Command_ClickMe = new RelayCommand(Command_ClickMe_Click);
RaisePropertyChanged("Command_ShowAddWindow");
RaisePropertyChanged("Command_ClickMe");
}
或者您在 ViewModel 构造函数中初始化您的命令在 DataBindings 初始化之前:
public ViewModel_Page1()
{
InitCommands();
...
}
我想知道为什么在 WPF 页面的 Loaded 事件中绑定按钮不起作用,只有在导航到另一个页面并返回后才会起作用。
我有一个清单应用程序,在主页上,大多数 ViewModel 都被调用,因为返回到特定列表的后退按钮是什么原因,它会开始绑定,即使该命令是不适用于该页面,它还会加载其他页面的集合。
所以我使用 Loaded 页面事件调用必要的方法来填充列表,并开始为这个特定页面绑定命令。我还使用 Unloaded 页面事件进行清理,例如取消订阅某些 CRUD 事件。
但现在的问题是,按钮没有在加载页面事件中绑定。不知道为什么..
我做了一个微型应用程序来演示这个问题。可以在这里下载
(包括完整的源代码)
https://www.dropbox.com/s/qzumzyicuvrktsi/ICommandTest.zip?dl=0
这是因为您的视图没有收到有关 Command_ShowAddWindow
和 Command_ClickMe
更改的通知。让我解释一下:
当您的 Page
构造函数是第一个 运行 时,您的命令的绑定将被初始化并传输到视图,但到那时您的命令是 null
,因此视图绑定两个按钮的命令 null
.
然后,当您的 Loaded
事件被触发时,命令会被初始化,但视图不会收到通知,因此它会将命令绑定到 null
。
问题的解决方案是:
您在初始化命令时手动调用 RaisePropertyChanged
通知视图命令更改:
void InitCommands()
{
Command_ShowAddWindow = new RelayCommand(Command_ShowAddWindow_Click);
Command_ClickMe = new RelayCommand(Command_ClickMe_Click);
RaisePropertyChanged("Command_ShowAddWindow");
RaisePropertyChanged("Command_ClickMe");
}
或者您在 ViewModel 构造函数中初始化您的命令在 DataBindings 初始化之前:
public ViewModel_Page1()
{
InitCommands();
...
}