如何绑定字符串值Y
或N
isEnabled 值?
<TextBox IsEnabled="{Binding Path=StringValueFromSomeEntity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
StringValueFromSomeEntity 可以是一个Y
或N
值。
如何绑定字符串值Y
或N
isEnabled 值?
<TextBox IsEnabled="{Binding Path=StringValueFromSomeEntity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
StringValueFromSomeEntity 可以是一个Y
或N
值。
使用转换器将字符串转换为布尔值:
public class StringToBoolConverter:IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value.ToString().ToLower() == "y")
return true;
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if ((bool)value)
return "Y";
return "N";
}
}
在资源中参考它:
<Window.Resources>
<conv:StringToBoolConverter x:Key="StringToBool"/>
</Window.Resources>
将其应用于您的绑定(如果您只想根据您的字符串更改 IsEnabled 属性,请使用 Mode=OneWay,但如果您真的想绑定 TwoWay,则需要 ConvertBack 方法):
<TextBox IsEnabled="{Binding Path=StringValueFromSomeEntity, Mode=OneWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ResourceKey=StringToBool}"/>
您可以像这样创建 IValueConverter 子类:
public class YNBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (value as string) == 'Y';
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value ? 'Y' : 'N';
}
}
如果您希望绑定 TwoWay,则需要 ConvertBack。然后将其添加到页面的资源中。并将其添加到绑定中
{Binding Path=StringValueFromSomeEntity, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged, Converter={StaticResource YNBoolConverter}}
默认情况下,字符串不能转换为 Boolen 类型,因此您必须告诉 WPF 如何转换并将值放在您想要的位置。
这里有两种实现方式。
使用 ValueConverter(首选方式)
将转换器添加到您的项目中,如下所示。
public class StringToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string val = System.Convert.ToString(value).ToUpper();
if (string.IsNullOrWhiteSpace(val))
return false;
return val == "Y" ? true : false;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
将命名空间添加到您的窗口中并添加资源
<Window.Resources>
<convrter:StringToBoolConverter x:Key="stringtoboolConverter"/>
</Window.Resources>
现在将此转换为复选框的 IsEnabled 属性。
<GroupBox Header="With Converter" >
<StackPanel>
<TextBox x:Name="txt1" Text="Y" />
<CheckBox IsEnabled="{Binding ElementName=txt1,Path=Text,Converter={StaticResource stringtoboolConverter}}" />
</StackPanel>
</GroupBox>
使用样式/触发器(替代方式)
<TextBox x:Name="txt" Text="Y" />
<CheckBox Content="IsEnabled" Tag="{Binding ElementName=txt,Path=Text}" >
<CheckBox.Style>
<Style TargetType="{x:Type CheckBox}">
<Style.Triggers>
<Trigger Property="Tag" Value="Y" >
<Setter Property="IsEnabled" Value="true"/>
</Trigger>
<Trigger Property="Tag" Value="N" >
<Setter Property="IsEnabled" Value="false"/>
</Trigger>
</Style.Triggers>
</Style>
</CheckBox.Style>
</CheckBox>
使用值转换器。
创建一个实现IValueConverter的类
例如
public class StringToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string value = (string)value;
return value.Trim().ToLower() == "y";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
之后,您可以将其应用于您的绑定