【发布时间】:2013-10-29 14:07:21
【问题描述】:
我在View (AXML) 中定义了一个按钮,代码如下:
<Button Content="Fetch Data" Command="{Binding readInventoryFilesCommand}" CommandParameter="{Binding Path=Text, ElementName=browseFolderTextBox}" Name="button1" />
该按钮按预期工作,但如果 ListView 已填充元素,我希望启用/禁用它。
- 如果listView中没有元素-->按钮
IsEnabled设置为false - 如果listView中有元素-->按钮
IsEnabled设置为true
我尝试使用IsEnabled="{Binding ...,但在Visual Studio C# Express 中没有得到code completion,而且很难猜出替代方案。
命令如下所示:
internal class ReadInventoryFilesCommand : ICommand
{
public ReadInventoryFilesCommand(ResourceViewModel viewModel)
{
_viewModel = viewModel;
}
private ResourceViewModel _viewModel;
#region ICommand Members
event EventHandler ICommand.CanExecuteChanged
{
add
{
CommandManager.RequerySuggested += value;
}
remove
{
CommandManager.RequerySuggested -= value;
}
}
bool ICommand.CanExecute(object parameter)
{
return _viewModel.CanUpdate;
}
void ICommand.Execute(object parameter)
{
_viewModel.ReadInventroyFiles(parameter.ToString());
}
#endregion
}
编辑 这是 Bobs 建议后的当前代码:
internal class ReadInventoryFilesCommand : ICommand
{
public ReadInventoryFilesCommand(ResourceViewModel viewModel)
{
_viewModel = viewModel;
_viewModel.PropertyChanged+= (s,e) => {
if (e.PropertyName == "CanUpdate") RaiseCanExecuteChanged();
};
}
private ResourceViewModel _viewModel;
event EventHandler ICommand.CanExecuteChanged;
bool ICommand.CanExecute(object parameter)
{
return _viewModel.CanUpdate;
}
void ICommand.Execute(object parameter)
{
_viewModel.ReadInventroyFiles(parameter.ToString());
}
void RaiseCanExecuteChanged() {
var handler = this.CanExecuteChanged;
if (handler != null) handler(this,EventArgs.Empty);
}
}
它会产生以下错误:
An explicit interface implementation of an event must use event accessor syntax
【问题讨论】:
-
命令是否正确实现canexecute和OnCanExecuteChanged?
-
@BobVale,请查看编辑
-
你到底从哪里得到了 canexecutechanged 的实现?您在哪里举办活动?
-
@BobVale,这是遗留代码。这就是与这个问题相关的所有代码了!
标签: c# visual-studio-2010 user-interface mvvm