![](/img/trans.png)
[英]Binding ToggleButton IsChecked property to another ToggleButton not working
[英]What executes first: ToggleButton.IsChecked binding update, or Command binding?
首先 - 免責聲明:
如果您正在閱讀此內容,因為您想同時使用IsChecked的綁定和RelayCommand來更改內容,那么您可能做錯了。 您應該使用
IsChecked
綁定的Set()
調用。
問題:
我有一個ToggleButton,其中有IsChecked
和Command
的綁定:
<ToggleButton IsChecked="{Binding BooleanBackedProperty}"
Command="{Binding SomeCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"
CommandParameter="{Binding}" />
是的 - 我知道,tsk tsk。 無法幫助。
當用戶點擊ToggleButton時,這兩個將首先觸發? Command是否會被執行,或者IsChecked綁定是否會更新綁定屬性? 或者 - 這實際上類似於創造競爭條件的社交帖子嗎?
IsChecked
在命令運行時將具有有效值。
ToggleButton
從ButtonBase
重寫OnClick
,如下所示:
protected override void OnClick()
{
OnToggle();
base.OnClick();
}
OnToggle
是更新IsChecked
的方法:
protected internal virtual void OnToggle()
{
// If IsChecked == true && IsThreeState == true ---> IsChecked = null
// If IsChecked == true && IsThreeState == false ---> IsChecked = false
// If IsChecked == false ---> IsChecked = true
// If IsChecked == null ---> IsChecked = false
bool? isChecked;
if (IsChecked == true)
isChecked = IsThreeState ? (bool?)null : (bool?)false;
else // false or null
isChecked = IsChecked.HasValue; // HasValue returns true if IsChecked==false
SetCurrentValueInternal(IsCheckedProperty, isChecked);
}
基礎OnClick
會觸發命令:
protected virtual void OnClick()
{
RoutedEventArgs newEvent = new RoutedEventArgs(ButtonBase.ClickEvent, this);
RaiseEvent(newEvent);
MS.Internal.Commands.CommandHelpers.ExecuteCommandSource(this);
}
來源: MSDN參考資料來源
因此,該值應在命令運行時有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.