不能使用caliburn micro绑定到ToggleButton的IsEnabled属性

时间:2014-01-29 18:53:32

标签: c# wpf windows-phone-8 caliburn.micro

我正在尝试绑定ToggleButton的IsEnabled属性但没有成功。

一旦启动了NotifyOfPropertyChange,我就会遇到以下异常:

Value does not fall within the expected range.

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

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

由于

更新:

我花了一段时间来确定问题,但最终设法了解了这一行为:

我创建了一个简单的测试人员,我使用按钮来启用/禁用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 个答案:

答案 0 :(得分:1)

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

通过使用Caliburn.Micro约定,您还应该能够获得所需的效果(尽管我仍然有兴趣查看错误的根本原因)。 x:Name=sp是否会导致任何约束?

如果您有方法SayHello,并且通过约定将<{1}}元素绑定到该方法:UI

您可以在名为x:Name="SayHello"的{​​{1}}上创建一个bool属性,ViewModel将用于启用/禁用控件;虽然您必须在该属性发生更改时调用CanSayHello(因此Caliburn.Micro知道并且可以更新控件)。

E.g。

NotifyPropertyChanged

Some additional info.