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