2013-02-21 42 views
0

如何將字符串YN的值綁定到isEnabled值?從字符串中綁定IsEnabled值

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

StringValueFromSomeEntity可以是YN值。

+0

可以懇求大家分享一些代碼嗎?可能是你需要轉換器 – 2013-02-21 07:21:53

+1

你應該使用一個轉換器,如下面的答案,這涵蓋了你的需求。如果有效,請不要忘記標記爲已回答;) – 2013-02-21 09:12:31

回答

3

使用一個轉換器將字符串轉換爲布爾值:

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屬性,使用模式=單向的,但如果你真的要綁定雙向您需要的ConvertBack法):

<TextBox IsEnabled="{Binding Path=StringValueFromSomeEntity, Mode=OneWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ResourceKey=StringToBool}"/> 
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(); 

    } 
} 

之後一類,你可以把它applay到你的綁定

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'; 
    } 
} 

你需要ConvertBack如果你期待綁定雙向。 然後將其添加到您網頁的資源中。所以你要告訴WPF如何轉換和取值在你想有地方 並將其添加到綁定

{Binding Path=StringValueFromSomeEntity, Mode=TwoWay, 
UpdateSourceTrigger=PropertyChanged, Converter={StaticResource YNBoolConverter}} 
1

默認字符串水溼轉換成Boolen類型。

這裏有兩種實現方法。

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

現在refrance此轉換成複選框的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>