[英]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.