我正在尝试绑定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。
答案 0 :(得分:1)
我无法复制上述示例中的错误,ViewModel
中是否还有其他信息?
通过使用Caliburn.Micro
约定,您还应该能够获得所需的效果(尽管我仍然有兴趣查看错误的根本原因)。 x:Name=sp
是否会导致任何约束?
如果您有方法SayHello
,并且通过约定将<{1}}元素绑定到该方法:UI
您可以在名为x:Name="SayHello"
的{{1}}上创建一个bool属性,ViewModel
将用于启用/禁用控件;虽然您必须在该属性发生更改时调用CanSayHello
(因此Caliburn.Micro
知道并且可以更新控件)。
E.g。
NotifyPropertyChanged