簡體   English   中英

不能使用caliburn micro綁定到ToggleButton的IsEnabled屬性

[英]can't bind to IsEnabled property of ToggleButton using 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。

我無法復制上述示例中的錯誤,您的ViewModel是否有其他信息?

通過使用Caliburn.Micro約定,您還應該能夠獲得所需的效果(盡管我仍然很想看到錯誤的根本原因)。 x:Name=sp導致任何綁定?

如果您具有方法SayHello ,並且具有通過約定綁定到該方法的UI元素: 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);
}

一些其他信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM