IsEnabled =假使使用caliburn micro

时间:2018-08-11 07:39:26

标签: wpf caliburn.micro

我的WPF项目中有一个按钮,如下所示:

        <Button 
            Grid.Column="1" 
            HorizontalAlignment="Left"
            x:Name="Add"
            IsEnabled="False"
            BorderThickness="0"
            Grid.Row="1" VerticalAlignment="Top" 
            Height="23" Width="29" Margin="10,0,0,0">
            <StackPanel>
                <Image Source="\Resources\Pictures\Add.png"
                   Width="20" Height="20"/>
            </StackPanel>
        </Button>

在相应的ViewModel中,我具有Add方法和CanAdd属性:

public bool CanAdd
{
   get { return true; }
}

public void Add()
{
   //some code
}

问题在于,当IsEnabled属性设置为False时,Button消失。我知道这是由于caliburn微拥vet所致。如何修改此约定,以便在将IsEnabled设置为False时禁用按钮,而当CanAddfalse时,它变为折叠状态(如现在)?

2 个答案:

答案 0 :(得分:1)

您不应在XAML标记中将IsEnabled设置为false。当Button属性仅返回CanAdd时,false将被禁用。因此,如果要禁用Button,则应实现视图模型以从false返回CanAdd。视图不应决定何时启用Button

如果要隐藏Button,请在XAML中将其Visibility属性设置为HiddenCollapsed或进行绑定将其添加到视图模型的Visibility源属性或bool属性中并使用BoolToVisibilityConverter

禁用Button不会隐藏它。

答案 1 :(得分:-1)

我在xaml中为此按钮定义了IsEnabled属性,仅用于测试目的。当ViewModel中的CanAddfalse时,按钮自动消失。为了解决这个问题,我必须将xaml中按钮的“可见性”属性设置为Visible,如果您确实不想在特定情况下消失按钮,则不需要其他属性(可见性类型)。