簡體   English   中英

WPF:多重綁定未使用 OnPropertyChanged 更新?

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

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