如何在Silverlight 4中禁用具有Command属性的按钮

3

我有一个按钮,它有一个Command属性。然而,我希望在另一个按钮被点击之前,该按钮不可用(用户无法单击它)。例如,只有在单击“新建”按钮后才能单击“保存”按钮。

那么我做以下操作:

<telerik:RadButton Content="Save" Height="22" HorizontalAlignment="Right" Margin="0,0,72,25" Name="saveRBtn" VerticalAlignment="Bottom" Width="43" Grid.Column="5" Grid.Row="4" 
                       IsEnabled="False"
                       Command="{Binding Path=LoadCommand, ElementName=documentLineDomainDataSource}" 
                       Click="saveRBtn_Click"/>

然而,如果我有Command属性,使用IsEnabled = False设置时似乎按钮不会被禁用。当我从代码中删除Command属性时,IsEnabled = false设置正常工作。不确定为什么存在Command属性时IsEnabled设置不起作用。请帮我解决问题,谢谢。
2个回答

5
一个按钮可以有或没有命令。如果不使用命令,您可以使用Click事件和IsEnabled属性。它们比命令更“直接”(并且在Silverlight支持命令属性之前就已经存在),因此它们具有优先权。
通常,如果使用命令,则不设置IsEnabled并且不处理Click事件。如果命令可以执行(CanExecute属性),则按钮将启用,并调用按钮的Execute方法。
回答您的问题,您应该删除IsEnabled的设置和click处理程序,并通过Command对象完成所有操作。

1

查看模型代码

public const string IsEnabledPropertyName = "IsEnabled";

private bool _IsEnabled = false;

public bool IsEnabled
{
    get
    {
        return _IsEnabled;
    }

    set
    {
        if (_IsEnabled == value)
        {
            return;
        }

        _IsEnabled = value;

        // Update bindings, no broadcast
        RaisePropertyChanged(IsEnabledPropertyName);
    }
}

尝试这个……

因为按钮的IsEnabled属性应该比Command的CanExecute方法返回值具有更高的优先级,您还可以查看此论坛帖子。因此,目前您不能同时使用IsEnabled和Command属性,您只能使用CanExecute方法来控制按钮的状态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接