2014-07-02 46 views
2

我想在控件上設置可見性屬性,以便在綁定值匹配任意值時可見。WPF綁定來控制可見性「數字不是有效的枚舉值」

我已經建立了我的轉換器作爲靜態資源

應用的結合

<Button Content="Foo" Visibility="{Binding SelectedValue, Converter={StaticResource ValueToVisibilityConverter}, ConverterParameter='1,2'}" /> 

,但我遇到了錯誤

錯誤1「{綁定的SelectedValue,轉換器= { StaticResource ValueToVisibilityConverter},ConverterParameter ='1,2'}'不能用作'可見性'的值 。數字不是有效的枚舉值。

我的轉換代碼是

public class ValueToVisibilityConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture) 
     { 
      if (value == null || parameter == null || !(value is String)) 
       return Visibility.Collapsed; 

      var currentValue = value.ToString(); 
      var matchStrings = parameter.ToString(); 
      var found = false; 

      foreach (var state in matchStrings.Split(',')) 
      { 
       found = (currentValue == state.Trim()); 

       if (found) 
        break; 
      } 

      return found ? Visibility.Visible : Visibility.Collapsed; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

錯誤停止編譯,感覺就像它正試圖太聰明,無視我的轉換器。

我是否應用了錯誤或者對某些進程無知?

編輯:

爲了得到轉換爲靜態的資源我有以下我的窗口定義

xmlns:myConverters="clr-namespace:<namespace>;assembly=<assemblyname>" 

這在我的窗口資源,右沿側爲其他相同的代碼完美工作的轉換器

<myConverters:ValueToVisibilityConverter x:Key="ValueToVisibilityConverter" /> 
+0

你爲什麼要傳遞ConverterParameter ='1,2'? –

回答

3

這是應該工作的代碼。

<Button Content="Foo" 
     Visibility="{Binding SelectedValue, 
        Converter={StaticResource ValueToVisibilityConverter}, 
        ConverterParameter=1|2}" /> 

的事情,你需要做的

  1. 價值觀ConverterParameter不帶任何引號傳遞。所以從轉換器參數中刪除單引號。

  2. 沒有什麼能阻止你向參數發送多個值,只要你有一個分隔符將它們稍後分開,但你不能使用逗號作爲分隔XAML的逗號。所以在這種情況下使用管道,並在管道|中使用管道分流參數。

而且,請注意,
一)必須有對資源這樣的轉換器的靜態資源。

<local:ValueToVisibilityConverter x:Key="ValueToVisibilityConverter" /> 

其中localxmlns:local="Your project in which this converter is defined"

注:一個小竅門易趣使用URL來使用,幾年前,在與QQ的URL來界定數據。雙Q在文本數據中自然不會出現。如果您遇到困難的文本分隔符,這將避免編碼問題,只需使用QQ ......這不會分裂的工作,雖然(它需要單一字符,但很高興知道):)

+0

然後我得到的錯誤 '未命名的參數「2」必須出現一個名爲arguments.' – Hugoagogo

+0

@Hugoagogo前:閱讀本http://stackoverflow.com/questions/7436156/converterparameter-any-way-to-pass-in - 一些分隔列表 –

+0

@Hugoagogo:看我改的回答。這應該明確地解決您的問題。 –

0

你可以通過像ConverterParameter

<Binding Path="MyProperty" 
      Converter="{StaticResource IntToBoolConverter}"> 
     <Binding.ConverterParameter> 
      <sys:Int32>0</sys:Int32> 
     </Binding.ConverterParameter> 
    </Binding> 
+0

我在問題中提到我需要能夠檢查與任意值匹配的問題,我不想爲任何需要匹配的值組合創建許多幾乎完全相同的轉換器。 – Hugoagogo

+0

看到我更新ANS –

+0

這怎麼可能擴展到多個值 – Hugoagogo