none
Win8中的MVVM疑问?在线等... RRS feed

  • 问题

  • 我想通过后台的bool变量来绑定我TextBlock控件的Visibility属性;

    可是实际运行中档我改变isVisible变量为true或者false时候控件绑定到IsVisible的Visibility属性的显示或者隐藏都一直没有效果;

    请详细慢慢的看,然后请告诉我错在哪里?

    <TextBlock Width="150" Text="{Binding Dish.Score}" Visibility="{Binding Path=IsVisible, Converter={StaticResource booltoVisibleConverter}}"></TextBlock>

        class BoolVisibleConverter : IValueConverter
        {
            public object Convert(object value, System.Type type, object parameter, string language)
            {
                bool isVisible; 
                if (value == null || !(value is bool))
                    isVisible = false;
                else
                    isVisible = (bool)value;
    
                return (isVisible ? Visibility.Visible : Visibility.Collapsed);
            }
            public object ConvertBack(object value, System.Type type, object parameter, string language)
            {
                throw new InvalidOperationException("Not yet support this function!");
            }
        }

            private bool isVisibile=true;
            public bool IsVisible
            {
                get { return isVisibile; }
                set
                {
                    isVisibile = value;
                    this.RaisePropertyChanged("IsVisible");
                }
            }

    而且在Blend中就是在visibility属性的绑定中显示不出入下图看了就明白了:

    同样的在ListView控件的ItemTemplate中,我TextBlock控件的Text属性可以在数据上下文中看到IsVisible,可是在Visible属性中创建数据绑定在数据上下文中就看不到IsVisible属性;

    请问如何把我的控件的Visible属性绑定到bool变量上呢?其中我用了类型转换器从bool到Visibility的转换的





    2013年3月28日 8:30

答案

  • Hi,

    从你给出的代码没有看出问题。可能是你INotifyPropertyChanged接口实现的有些问题。我推荐直接使用模板Bindablebase。


    Aaron
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Wayne1900 2013年5月28日 3:33
    2013年3月28日 9:20
    版主
  • 这是我写的converter

        /// <summary>
        /// Value converter that translates true to <see cref="Visibility.Visible"/> and false to
        /// <see cref="Visibility.Collapsed"/>.
        /// </summary>
        public sealed class BooleanToVisibilityConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, string language)
            {
                if (parameter != null && 
                    (parameter.ToString().ToUpper() == "NEGATION" || parameter.ToString().ToUpper() == "NEG"))
                    return (value is bool && (bool)value) ? Visibility.Collapsed : Visibility.Visible;
                else
                    return (value is bool && (bool)value) ? Visibility.Visible : Visibility.Collapsed;
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, string language)
            {
                if (parameter != null &&
                    (parameter.ToString().ToUpper() == "NEGATION" || parameter.ToString().ToUpper() == "NEG"))
                    return value is Visibility && (Visibility)value == Visibility.Collapsed;
                else
                    return value is Visibility && (Visibility)value == Visibility.Visible;
            }
        }

    使用的时候 可以传入一个 ConverterParameter = "NEG" 来反向转换。


    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。

    • 已标记为答案 Wayne1900 2013年5月28日 3:33
    2013年4月3日 9:46
    版主

全部回复

  • 主要是我需要在逻辑ViewModel上在某时需要通过bool变量控制控件的Visibility状态;

    如果你知道我错哪里请告诉我,或者有示范请贴代码或者Sample扔给我

    2013年3月28日 8:42
  • Hi,

    从你给出的代码没有看出问题。可能是你INotifyPropertyChanged接口实现的有些问题。我推荐直接使用模板Bindablebase。


    Aaron
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Wayne1900 2013年5月28日 3:33
    2013年3月28日 9:20
    版主
  • 这是我写的converter

        /// <summary>
        /// Value converter that translates true to <see cref="Visibility.Visible"/> and false to
        /// <see cref="Visibility.Collapsed"/>.
        /// </summary>
        public sealed class BooleanToVisibilityConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, string language)
            {
                if (parameter != null && 
                    (parameter.ToString().ToUpper() == "NEGATION" || parameter.ToString().ToUpper() == "NEG"))
                    return (value is bool && (bool)value) ? Visibility.Collapsed : Visibility.Visible;
                else
                    return (value is bool && (bool)value) ? Visibility.Visible : Visibility.Collapsed;
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, string language)
            {
                if (parameter != null &&
                    (parameter.ToString().ToUpper() == "NEGATION" || parameter.ToString().ToUpper() == "NEG"))
                    return value is Visibility && (Visibility)value == Visibility.Collapsed;
                else
                    return value is Visibility && (Visibility)value == Visibility.Visible;
            }
        }

    使用的时候 可以传入一个 ConverterParameter = "NEG" 来反向转换。


    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。

    • 已标记为答案 Wayne1900 2013年5月28日 3:33
    2013年4月3日 9:46
    版主