2013-06-28 5 views
0

У меня есть кнопка. Я хочу установить видимость кнопки в соответствии со значением целочисленного свойства класса. Для этого требуется привязка данных и конвертер.WPF Видимость Связывание с преобразованным экземпляром Свойство

Часть XAML код кнопки выглядит следующим образом:

<Window.Resources> 
     <local:Button1VisibilityConverter x:Key="Button1VisibilityConverter"/> 
     <local:ModeValues x:Key="ModeHolder"/> 
    </Window.Resources> 
    <Grid> 
     <StackPanel HorizontalAlignment="Left" Height="150" Margin="92,90,0,0" VerticalAlignment="Top" Width="301"> 
      <Button Content="1" Height="58" Background="#FFA20000" Foreground="White" Visibility="{Binding Source={StaticResource ModeHolder}, Path=State, Converter=Button1VisibilityConverter}"/> 
      <Button Content="2" Height="58" Background="#FF16A200" Foreground="White"/> 
      <Button Content="3" Height="58" Background="#FF4200A2" Foreground="White"/> 
     </StackPanel> 
    </Grid> 

Мой конвертер выглядит следующим образом:

class Button1VisibilityConverter : IValueConverter 
    { 
     public object Convert(object value, Type targettype, object parameter, System.Globalization.CultureInfo culture) 
     { 
      int mode = (int)value; 
      if (mode == ModeValues.Red) 
       return System.Windows.Visibility.Visible; 
      else 
       return System.Windows.Visibility.Collapsed; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      return null; 
     } 
    } 

Класс, который обладает свойством я хочу контролировать видимость выглядит следующим образом:

public class ModeValues : IObservable<int> 
    { 
     private int _state = -1; 

     public static int Red 
     { 
      get 
      { 
       return 0; 
      } 
     } 

     public static int Green 
     { 
      get 
      { 
       return 1; 
      } 
     } 

     public static int Purple 
     { 
      get 
      { 
       return 2; 
      } 
     } 

     public int State 
     { 
      get 
      { 
       return this._state; 
      } 
      set 
      { 
       this.State = value; 
      } 
     } 
    } 

Я понятия не имею, почему он не работает. Я думал, что мне нужно привязать видимость к свойству экземпляра ModeHolder, сделать наблюдаемый ModeHolder и преобразовать int в видимость. Что мне не хватает?

ответ

0
Converter=Button1VisibilityConverter 

должно быть:

Converter={StaticResource Button1VisibilityConverter} 
+0

Спасибо! Я узнал, что IObservable должен быть более полно реализован, но это исправило мою проблему. – Anthony

Смежные вопросы