[英]WPF: Multibinding not updating with OnPropertyChanged?
我有一個轉換器,它接受一個布爾值,並根據它是真還是假返回 A 或 B。 轉換器根據布爾值選擇正確的值,但僅在開始時,如果我在運行時更改布爾值,轉換器不會更新。
基本上,我有一個用戶控件,里面有一個按鈕,這個按鈕切換“IsOpen”屬性,這很有效。 但是我有一個將 IsOpen 綁定到 Image(按鈕)的 multibinder,它將根據 IsOpen 切換圖像。 但它沒有更新,只保留開始時的值。 (IsOpen 確實會在點擊時切換,這不是問題)
我的用戶控制我在哪里進行多重綁定:
<v:IconButton ColorPalette="{StaticResource MilkySolid}" ColorPaletteFore="{StaticResource BlackToBrightPalette}" IconMargin="0" Content="" VerticalAlignment="Top" Margin="0" HorizontalAlignment="Left" FontSize="1" Height="26" IconWidth="26" Click="IconButton_Click">
<v:IconButton.Image>
<MultiBinding Converter="{StaticResource AorBConverter}">
<Binding Path="IsOpen"/>
<Binding Source="{StaticResource collapseBTN}"/>
<Binding Source="{StaticResource expandBTN}"/>
</MultiBinding>
</v:IconButton.Image>
</v:IconButton>
CodeBehind(這部分有效)
private void IconButton_Click(object sender, RoutedEventArgs e)
{
IsOpen = !IsOpen;
}
public bool IsOpen
{
get { return (bool)GetValue(IsOpenProperty); }
set { SetValue(IsOpenProperty, value); }
}
public static readonly DependencyProperty IsOpenProperty =
DependencyProperty.Register("IsOpen", typeof(bool),
typeof(ParamNodeV), new PropertyMetadata(false));
用戶控件的視圖模型(這也有效)
public bool IsOpen
{
get { return isOpen; }
set
{
isOpen = value;
OnPropertyChanged(nameof(IsOpen));
}
}
所以,就像我說的,轉換器根據布爾值選擇正確的圖像。 但如果我在運行時更新布爾值,它不會更新。
如果你問我為什么我不只是使用觸發器:我正在嘗試從我的 UserControl (ParamNodeV) 更改 CustomControl (IconButton) 上的圖像,但我不知道如何從 ParamNodeV 訪問 IconButton 的屬性,而不完全覆蓋樣式/模板。 因此,如果有人幫助我使用轉換器或幫助我如何從 UserControl 導航到 IconButton 的 Image 屬性,而無需覆蓋樣式/模板
表達方式
<Binding Path="IsOpen"/>
將當前 DataContext 作為源 object。
在后面的代碼中,您顯然正在更改 UserControl 的 IsOpen 屬性 - 這應該是不同的 object。
因此,綁定應該使用該屬性作為源,即使用 UserControl 作為源 object:
<Binding Path="IsOpen" RelativeSource="{RelativeSource AncestorType=UserControl}"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.