我想在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对象不为null时才启用该按钮。我知道一种方法是在C#代码中有一个bool属性,告诉我Checked对象是否为null,然后将其绑定到IsEnabled属性。我想知道是否有一种方法可以直接将IsEnabled绑定到Checked对象?
答案 0 :(得分:2)
使用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中声明转换器的实例。
答案 1 :(得分:0)
您可以使用转换器将对象转换为bool。查看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}}" />