我的应用程序包含一个MainWindow和两个页面,它们通过一个简单的导航服务加载到一个框架中,该服务在ViewModelLocator中使用静态硬编码的Uris。这很好用,但我看到RelayCommand有些奇怪。
一个页面包含一个ListBox项和一个Edit按钮。如果我在ListBox中选择一个项,则EditCommand的CanExecute方法将触发并启用该按钮(因为SelectedItem不为null)。当我切换到应用程序中的另一个页面,然后切换回(没有做任何事情) - SelectedItem显示为灰色(选中,非活动)。没有问题,因为焦点在菜单按钮上。我无法弄清楚的是为什么编辑按钮被禁用(当重新显示页面时,RelayCommand的CanExecute没有激活 - 用调试器验证),因为SelectedItem仍然具有正确的值。
我看到的第二个问题是,在我的应用程序中切换页面后,当我更改列表框中的选定项目时,编辑按钮的RelayCommand会多次触发。我可以通过调试器确认只存在一个ViewModel实例(构造函数只被调用一次。)
到目前为止,我发现每次更改SelectedItem时,RelayCommand会触发3次。
任何人都可以解释这种行为并提供解决方案吗?