【发布时间】:2026-02-02 23:00:02
【问题描述】:
我有下面的“画布”xaml...我想改变它的可见性取决于属性的变化。
XAML:
<d1:BooleanToVisibilityConverter x:Key="BoolToVis" />
Visibility="{Binding Path=IsVisible, Converter={StaticResource BoolToVis}, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
我在 ViewModel 中有这个 Visibility 属性
private bool _isVisible;
public bool IsVisible
{
get { return _isVisible; }
set
{
_isVisible = value;
RaisePropertyChanged("IsVisible");
}
}
这是我的转换器代码:
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 属性更改事件,命名空间 Microsoft.Practices.Prism.ViewModel { [Serializable] public abstract class NotificationObject : INotifyPropertyChanged { protected NotificationObject();公共事件 PropertyChangedEventHandler PropertyChanged; protected void RaisePropertyChanged
(Expression > propertyExpression); protected void RaisePropertyChanged(params string[] propertyNames);受保护的虚拟 void RaisePropertyChanged(string propertyName); } -
谢谢,但这不是我问的。我问您如何更新 IsVisible 属性(您是否不小心设置了字段而不是属性?)
-
我正在为事件聚合器方法之一执行此操作 if(carStatus = "Reserved") this.IsVisible = true;否则 this.IsVisible = false;
标签: wpf