我知道這工作得很好:WPF - 是否可以否定數據綁定表達式的結果?
<TextBox IsEnabled="{Binding ElementName=myRadioButton, Path=IsChecked}" />
...但我真正想要做的是否定類似以下(僞代碼)綁定表達式的結果。這可能嗎?
<TextBox IsEnabled="!{Binding ElementName=myRadioButton, Path=IsChecked}" />
我知道這工作得很好:WPF - 是否可以否定數據綁定表達式的結果?
<TextBox IsEnabled="{Binding ElementName=myRadioButton, Path=IsChecked}" />
...但我真正想要做的是否定類似以下(僞代碼)綁定表達式的結果。這可能嗎?
<TextBox IsEnabled="!{Binding ElementName=myRadioButton, Path=IsChecked}" />
可以使用的IValueConverter做到這一點:
public class NegatingConverter : IValueConverter
{
public object Convert(object value, ...)
{
return !((bool)value);
}
}
,並使用其中的一個作爲您綁定的轉換器。
不幸的是,你不能直接執行的運營商,如否定,在綁定表達式......我會建議使用ValueConverter反轉布爾。
如果你想要一個除bool以外的結果類型,我最近開始使用ConverterParameter來給自己一個否定轉換器結果值的選項。下面是一個例子:
[ValueConversion(typeof(bool), typeof(System.Windows.Visibility))]
public class BooleanVisibilityConverter : IValueConverter
{
System.Windows.Visibility _visibilityWhenFalse = System.Windows.Visibility.Collapsed;
/// <summary>
/// Gets or sets the <see cref="System.Windows.Visibility"/> value to use when the value is false. Defaults to collapsed.
/// </summary>
public System.Windows.Visibility VisibilityWhenFalse
{
get { return _visibilityWhenFalse; }
set { _visibilityWhenFalse = value; }
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool negateValue;
Boolean.TryParse(parameter as string, out negateValue);
bool val = negateValue^(bool)value; //Negate the value using XOR
return val ? System.Windows.Visibility.Visible : _visibilityWhenFalse;
}
...
該轉換器將bool轉換爲System.Windows.Visibility。該參數允許它在轉換之前否定bool,以防需要逆向行爲。如果您已經使用了值轉換器
Visibility="{Binding Path=MyBooleanProperty, Converter={StaticResource boolVisibilityConverter}, ConverterParameter=true}"
非常好的建議,非常感謝! – DreamOfMirrors 2012-06-29 13:32:27
遺憾的是在隨後的結合,你不得不求助於某種類型的管道/以抵消由該值返回的值鏈接技術:您可以在這樣一個元素使用轉換器。 – jpierson 2010-01-26 13:46:51