C# can';使用caliburn micro无法绑定到ToggleButton的IsEnabled属性
我试图绑定ToggleButton的IsEnabled属性,但没有成功 一旦触发NotifyOfPropertyChange,就会出现以下异常: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
当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);
}