Wpf PropertyChanged事件未更改使用转换器绑定的UI

Wpf PropertyChanged事件未更改使用转换器绑定的UI,wpf,Wpf,我有下面的xaml用于“canvas”…我想更改其可见性取决于属性更改 XAML: 这是我的转换器代码: class BooleanToVisibilityConverter : IValueConverter { public BooleanToVisibilityConverter() { } #endregion #region Properties public bool Collapse { get; set; } #endregion

我有下面的xaml用于“canvas”…我想更改其可见性取决于属性更改

XAML:

这是我的转换器代码:

class BooleanToVisibilityConverter : IValueConverter
{
    public BooleanToVisibilityConverter() { }
    #endregion

    #region Properties
    public bool Collapse { get; set; }
    #endregion

    #region IValueConverter Members
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        bool bValue = (bool)value;
        if (bValue)
        {
            return Visibility.Visible;
        }
        else
        {
            return Visibility.Collapsed;
            //if (Collapse)
            //    return Visibility.Collapsed;
            //else
            //    return Visibility.Hidden;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        //Visibility visibility = (Visibility)value;

        //if (visibility == Visibility.Visible)
        //    return true;
        //else
        //    return false;
        return value;
    }
    #endregion
}

调试时,我观察到Setter正在更改属性值,但它没有在转换器上达到断点。转换器仅在加载窗口时最初被击中。之后,即使属性发生了更改,它也不会被触发。

我了解到您正在使用Prism,因此请尝试更改您的RaisePropertyChanged格式:

RaisePropertyChanged(() => IsVisible);

是否正确更改了属性?也就是说,它是通过属性设置的,而不是直接针对字段设置的吗?您没有向我们显示该代码。我使用的是Prism Property changed事件,命名空间为Microsoft.Practices.Prism.ViewModel{[Serializable]公共抽象类NotificationObject:INotifyPropertyChanged{protected NotificationObject();公共事件PropertyChangedEventHandler PropertyChanged;受保护的void RaisePropertyChanged(表达式propertyExpression);受保护的void RaisePropertyChanged(参数字符串[]propertyNames);受保护的虚拟void RaisePropertyChanged(字符串propertyName);}谢谢,但这不是我要问的。我问你是如何更新IsVisible属性的(你是不是无意中设置了字段而不是属性?)this.IsVisible=true;else this.IsVisible=false;这与我的视图模型无关。上面的代码是针对子视图模型B的。它充当父视图模型A的可观察集合。最初,我通过调用B的新实例从A设置属性。因此,我认为您发布的代码部分没有错误。另一部分肯定有问题,但如果没有代码,就不容易帮助您。可能您有绑定错误,但我认为代码不可能找到它。您看到输出窗口中是否有建议了吗?
class BooleanToVisibilityConverter : IValueConverter
{
    public BooleanToVisibilityConverter() { }
    #endregion

    #region Properties
    public bool Collapse { get; set; }
    #endregion

    #region IValueConverter Members
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        bool bValue = (bool)value;
        if (bValue)
        {
            return Visibility.Visible;
        }
        else
        {
            return Visibility.Collapsed;
            //if (Collapse)
            //    return Visibility.Collapsed;
            //else
            //    return Visibility.Hidden;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        //Visibility visibility = (Visibility)value;

        //if (visibility == Visibility.Visible)
        //    return true;
        //else
        //    return false;
        return value;
    }
    #endregion
}
RaisePropertyChanged(() => IsVisible);