gpt4 book ai didi

c# - 无法使用 Caliburn Micro 绑定(bind)到 ToggleButton 的 IsEnabled 属性

转载 作者:太空宇宙 更新时间:2023-11-03 13:28:34 24 4
gpt4 key购买 nike

我试图绑定(bind) ToggleButton 的 IsEnabled 属性但没有成功。

一旦 NotifyOfPropertyChange 被触发,我就会收到以下异常:

值不在预期范围内。

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

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

谢谢

更新:

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

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

ToggleButton 控件不包含任何内容时,一切正常;然而,在向其添加子控件后(在我们的例子中,我只是添加了一个 StackPanel)引发了一个异常:

值不在预期范围内 - 就在调用 NotifyOfPropertyChange() 之后。

这是我使用的有问题的 View :

<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。

最佳答案

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

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

如果您有一个方法 SayHello,并且 UI 元素通过约定绑定(bind)到该方法:x:Name="SayHello"

您可以在 ViewModel 上创建一个名为 CanSayHello 的 bool 属性,Caliburn.Micro 将使用它来启用/禁用控件;尽管您必须在该属性更改时调用 NotifyPropertyChanged(以便 UI 知道并可以更新控件)。

例如

<!-- 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.

关于c# - 无法使用 Caliburn Micro 绑定(bind)到 ToggleButton 的 IsEnabled 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21440019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com