更新:焦点变成MVVM而不是实际问题,所以我正在更新它.
我有一个问题CanExecute
了DelegateCommand
.它在我打电话之前没有更新RaiseCanExecuteChanged
,这是期望的行为吗?
我在这里上传了一个简单的示例项目来重现这个问题:http://dl.dropbox.com/u/39657172/DelegateCommandProblem.zip
问题是这个,我有两个Buttons
这样的.一个是绑定Command
到一个RelayCommand
实现,另一个绑定到Prism的实现DelegateCommand
<Button Command="{Binding DelegateSaveCommand}"/>
<Button Command="{Binding RelaySaveCommand}"/>
Run Code Online (Sandbox Code Playgroud)
ViewModel ICommands
DelegateSaveCommand = new DelegateCommand(Save, CanSaveDelegate);
RelaySaveCommand = new RelayCommand(param => Save(), param => CanSaveRelay);
Run Code Online (Sandbox Code Playgroud)
和CanExecute
方法/谓词
public bool CanSaveDelegate()
{
return HasChanges;
}
public bool CanSaveRelay
{
get { return HasChanges; }
}
Run Code Online (Sandbox Code Playgroud)
两人都在使用该物业HasChanges
.何时HasChanges
更新,仅CanSaveRelay
更新.这是它的意思吗?
我有一个带有ListBox和3个按钮的DocumentListView.Xaml.
在UserControl后面是一个带有3个按钮的DocumentListViewModel,它们的Command属性绑定到3个RelayCommands.
我有3个Controller,如AdministrationController,BillingController,ReportController.
每个Controller都有ObservableCollections,如客户1:N订单1:N文档与其他控制器相同.
在一个控制器中,我有一个特殊的绑定情况.当我的DocumentListViewModel未被其父ViewModel(如OrderViewModel)初始化时(因为没有加载/存在订单),那么我的UserControl有3个按钮,它们是ENABLED.好的,用户可以按下3个按钮,没有任何反应,但仍然非常混乱,最重要的是我的用户界面的一致性消失了.
如何将按钮的命令设置为默认为"已禁用"?
将按钮IsEnabled属性设置为false没有帮助,因为该按钮将永远保持在禁用状态.否CanExecute TRUE会将其设置为IsEnabled = true.
而且我不想引入另一个属性IsButtonEnabled ...那个愚蠢因为那时我的两个世界winforms和wpf在我的按钮逻辑之后...... ICommand应该就够了.