0

Y文字列の値またはNisEnabled値にバインドするにはどうすればよいですか?

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

StringValueFromSomeEntityはYまたはN値にすることができます。

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に指示し、必要な場所に値を配置する必要があります。

これを実装する2つの方法があります。

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 ProperyofCheckboxに変換します。

  <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

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();

    }
}

その後、あなたはそれをあなたのバインディングに適用することができます

于 2013-02-21T07:24:34.443 に答える