2011-11-01 50 views
0

在Silverlight中,我有一個標準的IValueConverter,我想將可能的參數定義爲常量字符串。是否可以在轉換器參數中使用來自IValueConverter的靜態值?

public class BooleanConverter : IValueConverter 
{ 
    public const string PARAMETER_ONE = "one"; 
    public const string PARAMETER_TWO = "two"; 
... 

話,我想用不斷的轉換參數內,是這樣的:

<TextBlock Text="{Binding Name, Converter={StaticResource BooleanConverter}, 
     ConverterParameter={StaticResource BooleanConvereter.PARAMETER_TWO}" /> 

這可能嗎?如果是,那麼正確的語法是什麼?

回答

1

您可以同時使用參數和參數。示例:

<converters:VisibilityConverter x:Key="inversVisibConverter" Inverse="True"/> 

Visibility="{Binding ABoolValue, Mode=OneWay, Converter={StaticResource inversVisibConverter},ConverterParameter=abc}" 

轉換器(同時包含參數參數):

public sealed class VisibilityConverter : IValueConverter { 

     public bool Inverse { get; set; } 

     #region Implementation of IValueConverter 
     object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     {    
      Visibility visibility = Visibility.Visible; 

      if (value is bool) 
      { 
       visibility = (bool) value ? Visibility.Visible : Visibility.Collapsed; 
      } 

      if(parameter != null) 
      { 
       //handle parameter here: 

      } 

      if (Inverse) 
      { 
       visibility = (visibility == Visibility.Visible) ? Visibility.Collapsed : Visibility.Visible; 
      } 

      return visibility; 
     } 

     object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { 
      if (!(value is Visibility)) { 
       throw new ArgumentOutOfRangeException("value", "VisibilityConverter can only convert from Visibility"); 
      } 

      if (targetType == typeof(bool)) { 
       return ((Visibility)value == Visibility.Visible) ? true : false; 
      } 

      throw new ArgumentOutOfRangeException("targetType", "VisibilityConverter can only convert to Boolean"); 
     } 
     #endregion 
} 
+0

雖然我更喜歡使用參數,但您的解決方案很有趣,如果使用該屬性並將其鏈接到枚舉,則可以解決我的問題。然後我只能使用定義的枚舉值。謝謝! – fergie

2

您應該能夠使用靜態標記擴展:

<TextBlock Text="{Binding Name,Converter={StaticResource BooleanConverter},ConverterParameter={x:Static cnv:BooleanConverter.PARAMETER_ONE}}" /> 

注意,x:Static需要類本身,而不是你的資源的引用。因此,您需要爲其添加適當的XML名稱空間前綴。

+0

我應該提到,我在Silverlight我的工作,我做了標記,但忘了說在文中。從我所看到的,{x:Static}僅適用於WPF。那是對的嗎? – fergie

相關問題