Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# can';使用caliburn micro无法绑定到ToggleButton的IsEnabled属性_C#_Wpf_Windows Phone 8_Caliburn.micro - Fatal编程技术网

C# can';使用caliburn micro无法绑定到ToggleButton的IsEnabled属性

C# can';使用caliburn micro无法绑定到ToggleButton的IsEnabled属性,c#,wpf,windows-phone-8,caliburn.micro,C#,Wpf,Windows Phone 8,Caliburn.micro,我试图绑定ToggleButton的IsEnabled属性,但没有成功 一旦触发NotifyOfPropertyChange,就会出现以下异常: 值不在预期范围内。 使用一个简单的按钮,上述配置可以正常工作 我想知道有没有解决这个问题的办法 谢谢 更新: 我花了一段时间才找到问题所在,但最终还是理解了行为: 我创建了一个简单的测试仪,在这里我使用一个按钮来启用/禁用一个ToggleButton 当ToggleButton控件不包含任何内容时,所有控件均正常工作;但是,在向其添加子控件后(在我们的

我试图绑定ToggleButton的IsEnabled属性,但没有成功

一旦触发NotifyOfPropertyChange,就会出现以下异常:

值不在预期范围内。

使用一个简单的按钮,上述配置可以正常工作

我想知道有没有解决这个问题的办法

谢谢

更新:

我花了一段时间才找到问题所在,但最终还是理解了行为:

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

ToggleButton
控件不包含任何内容时,所有控件均正常工作;但是,在向其添加子控件后(在我们的示例中,我刚刚添加了一个
StackPanel
),会引发一个异常:

值不在预期范围内
-就在调用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>

有办法解决这个问题吗平台是WP8。

我无法复制上面示例中的错误,您的
视图模型中是否有其他信息

通过使用
Caliburn.Micro
约定,您还应该能够获得想要的效果(尽管我仍然有兴趣了解错误的根本原因)。
x:Name=sp
是否导致绑定任何内容

如果您有一个方法
SayHello
,其中有一个
UI
元素通过约定绑定到该方法:
x:Name=“SayHello”

您可以在
ViewModel
上创建名为
CanSayHello
的bool属性,该属性将用于启用/禁用控件;虽然当属性更改时,您必须调用
NotifyPropertyChanged
(这样
UI
可以感知并更新控件)

例如


//在您的ViewModel上
公共图书馆CanSayHello
{
得到
{
返回值;
}
}
公共作废点击()
{
HasValue=!HasValue;
NotifyOfPropertyChange(()=>CanSayHello);
}

请发布有问题的xaml以及绑定到的对象/属性,好吗?作为子控件的控件可能是另一个控件的子控件。。请检查一下。。。
    private bool _hasvalue;

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

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

    public void Click()
    {
        HasValue = !HasValue;
    }
<!-- 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);
}