2014-01-29 111 views
1

我試圖綁定一個ToggleButton的IsEnabled屬性沒有成功。無法綁定到使用caliburn micro ToggleButton的IsEnabled屬性

一旦NotifyOfPropertyChange被激發,我發現了以下異常:

Value does not fall within the expected range.

使用一個簡單的按鈕,上面的配置按預期工作。

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

感謝

UPDATE:

以及我花了一段時間來查明問題,但終於明白行爲:

我創建了一個簡單的測試,我使用一個按鈕啓用/禁用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。

+1

請您在發佈有關XAML,與對象/屬性要綁定到一起? – philorube

+0

控制這是你的子控件,可能是另一個控件的孩子..請檢查... – Sankarann

回答

0

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

您應該也可以通過使用Caliburn.Micro約定來獲得所需的效果(儘管我仍然有興趣查看錯誤的根本原因)。是x:Name=sp導致任何被綁定?

如果你有一個方法SayHello,通過一個公約約束的方法UI元素:x:Name="SayHello"

您可以創建你的ViewModel一個布爾值屬性稱爲CanSayHello,這Caliburn.Micro將用來啓用/禁用控制;儘管在屬性更改時您必須撥打NotifyPropertyChanged(因此UI已知道並且可以更新控件)。

E.g.

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