0

如何绑定字符串值YNisEnabled 值?

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

StringValueFromSomeEntity 可以是一个YN值。

4

4 回答 4

4

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

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}"/>
于 2013-02-21T07:26:41.293 回答
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}}
于 2013-02-21T07:28:46.393 回答
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>

现在将此转换为复选框的 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>
于 2013-02-21T08:02:28.220 回答
0

使用值转换器。

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

    }
}

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

于 2013-02-21T07:24:34.443 回答