[英]Bind control's Enable property to a CheckBox's Checked property
[英]Is there a way to bind the Enabled property of a button to a checkbox's Checked property?
我想綁定WPF中Button的IsEnabled如下:
WPF 代碼:
<Button Content="TestButton" IsEnabled="{Binding ??}" />
C# 代碼:
private MyObjectClass _Checked;
public MyObjectClass Checked
{
get { return _Checked; }
set
{
_Checked = value;
RaisePropertyChanged("Checked");
}
}
在上面的 WPF 代碼中,我希望僅當 Checked object 不是 null 時才啟用按鈕。我知道一種方法是在 C# 代碼中有一個 bool 屬性,它告訴我 Checked object 是否是 null,然后綁定它IsEnabled 屬性。 我想知道是否有一種方法可以將 IsEnabled 直接綁定到 Checked object?
使用DataTrigger
並檢查綁定的{x:Null}
值:
<Button Content="TestButton">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding Checked}" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
另外,您可以使用IValueConverter ,如果value為null,則返回false,否則返回true。
public class ObjectToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
bool returnValue = true;
if (value == DependencyProperty.UnsetValue || value == null)
{
returnValue = false;
}
return returnValue;
}
public object ConvertBack(object value, Type targetType, object parameter,
CultureInfo culture)
{
return Binding.DoNothing;
}
}
並綁定到XAML中:
<Button Content="TestButton"
IsEnabled="{Binding Checked,
Converter={StaticResource ObjectToBoolConverter}}" />
當然,您需要為此在XAML中聲明轉換器的實例。
您可以使用轉換器將對象轉換為布爾值。 查看IValueConverter。
public class IsNotNullToBoolConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value != null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException("Two-way binding not supported by IsNotNullToBoolConverter");
}
}
您的xaml看起來像這樣:
<Window.Resources>
<local:IsNotNullToBoolConverter x:Key="IsNotNull" />
</Window.Resources>
...
<Button IsEnabled="{Binding Converter={StaticResource IsNotNull}}" />
我知道這是一個老問題,但你可以在沒有額外代碼的情況下做到這一點。 只需將“TargetNullValue=false”添加到綁定中即可。
IsEnabled="{Binding SomeProperty, TargetNullValue=false}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.