2014-01-29 67 views
1

我试图绑定一个ToggleButton的IsEnabled属性没有成功。无法绑定到使用caliburn micro ToggleButton的IsEnabled属性

一旦NotifyOfPropertyChange被激发,我发现了以下异常:

Value does not fall within the expected range.

使用一个简单的按钮,上面的配置按预期工作。

我想知道是否有任何解决方法?

感谢

UPDATE:

以及我花了一段时间来查明问题,但终于明白行为:

我创建了一个简单的测试,我使用一个按钮启用/禁用ToggleButton

ToggleButton控件不包含任何东西时,所有工作都正常;然而,在添加子控件后(在我们的例子中,我只是增加了一个StackPanel)会引发一个异常:

Value does not fall within the expected range - 在调用NotifyOfPropertyChange()之后。

这里是有问题的看法我使用:

<StackPanel> 
    <ToggleButton x:Name="SayHello" Grid.Column="1" IsEnabled="{Binding HasValue}" Height="190"> 
     <StackPanel x:Name="sp"> </StackPanel> 
    </ToggleButton> 
    <Button x:Name="Click"></Button> 
</StackPanel> 

ViewModel

private bool _hasvalue; 

    public bool HasValue 
    { 
     get { return _hasvalue; } 
     set 
     { 

       _hasvalue = value; 
       NotifyOfPropertyChange(() => HasValue); 
     } 
    } 

    public void Click() 
    { 
     HasValue = !HasValue; 
    } 

任何方式要解决谁的呢? - 平台是WP8。

+1

请您在发布有关XAML,与对象/属性要绑定到一起? – philorube

+0

控制这是你的子控件,可能是另一个控件的孩子..请检查... – Sankarann

回答

0

我无法复制上述示例中的错误,您的ViewModel中是否有其他信息?

您应该也可以通过使用Caliburn.Micro约定来获得所需的效果(尽管我仍然有兴趣查看错误的根本原因)。是x:Name=sp导致任何被绑定?

如果你有一个方法SayHello,通过一个公约约束的方法UI元素:x:Name="SayHello"

您可以创建你的ViewModel一个布尔值属性称为CanSayHello,这Caliburn.Micro将用来启用/禁用控制;尽管在属性更改时您必须拨打NotifyPropertyChanged(因此UI已知道并且可以更新控件)。

E.g.

<!-- Your existing Control, Note `IsEnabled` is not bound --> 
<ToggleButton x:Name="SayHello" Height="40"> 

// On your ViewModel 
public bool CanSayHello 
{ 
    get 
    { 
     return HasValue; 
    } 
} 

public void Click() 
{ 
    HasValue = !HasValue; 
    NotifyOfPropertyChange(() => CanSayHello); 
} 

Some additional info.