从字符串绑定IsEnabled值

时间:2013-02-21 07:20:46

标签: wpf binding textbox wpf-controls isenabled

如何将字符串YN的值绑定到isEnabled值?

<TextBox IsEnabled="{Binding Path=StringValueFromSomeEntity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

StringValueFromSomeEntity可以是YN值。

4 个答案:

答案 0 :(得分:3)

使用转换器将字符串转换为bool值:

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}"/>

答案 1 :(得分:2)

您可以像这样创建一个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}}

答案 2 :(得分:1)

默认情况下,字符串不能转换为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>

现在请将此转换为Checkbox的IsEnabled Propery。

  <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>

答案 3 :(得分:0)

使用ValueConverter。

创建一个实现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();

    }
}

之后,您可以将其应用于绑定