WPF RelyCommand绑定但不';不执行?
我有一个绑定到视图模型的命令,该命令已启用,但并不总是执行。我如何进行调试?我使用了WPF检查器,它再次确认绑定是正确的 更多详情: 我有一个选项卡控件,它仅在未选择选项卡时执行关闭选项卡的命令。选择选项卡后,命令将不会命中 代码相当标准,我似乎无法看到或调试问题 选项卡项上的模板化关闭按钮WPF RelyCommand绑定但不';不执行?,wpf,mvvm,command,mvvm-light,Wpf,Mvvm,Command,Mvvm Light,我有一个绑定到视图模型的命令,该命令已启用,但并不总是执行。我如何进行调试?我使用了WPF检查器,它再次确认绑定是正确的 更多详情: 我有一个选项卡控件,它仅在未选择选项卡时执行关闭选项卡的命令。选择选项卡后,命令将不会命中 代码相当标准,我似乎无法看到或调试问题 选项卡项上的模板化关闭按钮 <Style x:Key="ClosableStyle" TargetType="telerik:RadTabItem"> <
<Style x:Key="ClosableStyle" TargetType="telerik:RadTabItem">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ContentControl Grid.Column="0" Content="{Binding DisplayName}"/>
<telerik:RadButton Grid.Column="1" Margin="3 1 -4 0" Width="16" Height="16" Opacity="0.7" Command="{Binding Path=CloseCommand}">
<TextBlock Text="x" FontFamily="Arial Rounded MT" FontSize="12" Margin="0,-3,0,0" />
</telerik:RadButton>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
命令:
RelayCommand _closePanelCommand;
/// <summary>
/// Returns the command that, when invoked, attempts
/// to remove this workspace from the user interface.
/// </summary>
public virtual ICommand CloseCommand
{
get
{
if (_closePanelCommand == null)
{
_closePanelCommand = new RelayCommand(
() =>
{
this.OnRequestClose();
}
);
}
return _closePanelCommand;
}
}
RelayCommand\u closepanel命令;
///
///返回调用时尝试执行的命令
///从用户界面中删除此工作区。
///
公共虚拟ICommand CloseCommand
{
得到
{
如果(_closePanelCommand==null)
{
_closePanelCommand=新的RelayCommand(
() =>
{
这个.OnRequestClose();
}
);
}
返回_closepanel命令;
}
}
我想您的问题是,您试图将ICommand用作INotifiableProperty,但这样做行不通。您需要在ViewModel的构造函数中为您的命令提供如下处理程序-
this.CloseCommand= new RelayCommand(param => this.OnRequestClose(param));
public ICommand CloseCommand { get; set; }
把你的财产写成这样-
this.CloseCommand= new RelayCommand(param => this.OnRequestClose(param));
public ICommand CloseCommand { get; set; }
您应该检查按钮的实际数据上下文(使用Snoop)。我认为,如果您的命令没有被触发,datacontext是不正确的。我还建议使用它,这是一个UI调试实用程序,对于这种调试是必不可少的。否则你就瞎飞了
按钮
的问题是,如果命令绑定失败(默认情况下发生),按钮
将保持启用状态,因此您不知道该按钮是因为ICommand
这样说还是因为绑定失败而启用的
您还可以查看输出窗口,该窗口会告诉您绑定是否失败,但snoop比读取输出窗口中的一堆文本要容易得多:)这里的“param”是您希望从xaml随命令发送的任何commandparameter。如果您不需要任何参数,可以像在属性中那样声明。但我会提到使用这种语法。我认为这个问题被误解了。OnRequestClose在到达该行时工作。OnRequestClsor取自Josh Smith的MVVM示例,非常简单。您曾写道,有时您的命令无法执行,您能否更具体地说明它无法执行的情况,以及当您处理了如果选择了tabitem命令将无法启动的情况时,您能否提供代码。也许这会有所帮助