简体   繁体   English

WPF可见性绑定到转换后的实例属性

[英]WPF Visibility Binding to Converted Instance Property

So I have a button. 所以我有一个按钮。 I want to set the visibility of the button according to the value of an integer property of a class. 我想根据一个类的整数属性的值设置按钮的可见性。 This requires a data binding and a converter. 这需要数据绑定和转换器。

The XAML code for the button is as follows: 该按钮的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>

My converter is as follows: 我的转换器如下:

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

The class that has the property I want to control the visibility is as follows: 具有要控制可见性的属性的类如下:

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

I have no idea why it isn't working. 我不知道为什么它不起作用。 I thought I had to bind the visibility to the property of the instance of the ModeHolder, make the ModeHolder observable, and convert the int to a visibility. 我以为我必须将可见性绑定到ModeHolder实例的属性,使ModeHolder可观察,并将int转换为可见性。 What am I missing? 我想念什么?

Converter=Button1VisibilityConverter

应该:

Converter={StaticResource Button1VisibilityConverter}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM