У меня есть кнопка. Я хочу установить видимость кнопки в соответствии со значением целочисленного свойства класса. Для этого требуется привязка данных и конвертер.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 в видимость. Что мне не хватает?
Спасибо! Я узнал, что IObservable должен быть более полно реализован, но это исправило мою проблему. – Anthony