[英]How to do a simple XAML (WPF) conditional binding on the Visibility property
我有一個帶有屬性的視圖模型:
public class MyModel
{
public bool IsEnabled {get;set;}
}
我想使用此屬性來切換按鈕狀態。 如果布爾值為true,我想隱藏按鈕,否則顯示它。
我嘗試過這樣的事情:
<Button Visibility= "{Binding IsEnabled ? Hidden : Visible }">Enable</Button>
但這不合適。
我嘗試了一些更復雜的解決方案,但我的猜測是,我錯過了一些微不足道的東西。
有什么建議?
由於您希望在Hidden
和Visible
之間切換並且隱藏了true,您可以編寫自定義IValueConverter
或使用簡單的Style.Trigger
<Button Content="Enable">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsEnabled}" Value="True">
<Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
這是假設相應地設置DataContext
並且每當更改時MyModel.IsEnabled
引發INotifyPropertyChanged.PropertyChanged
事件
public class MyModel : INotifyPropertyChanged
{
private bool _isEnabled;
public bool IsEnabled
{
get { return _isEnabled; }
set
{
_isEnabled = value;
OnPropertyChanged("IsEnabled");
}
}
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
使用BooleanToVisibilityConverter:
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</Window.Resources>
<Button Visibility= "{Binding IsEnabled, Converter={StaticResource BooleanToVisibilityConverter}}" />
添加繼承IValueConverter的類
public class BooleanToVisibilityConverter : IValueConverter
{
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;
}
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;
}
#endregion
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.