代码之家  ›  专栏  ›  技术社区  ›  Budda

Silverlight 4:如何切换控件可见性

  •  8
  • Budda  · 技术社区  · 15 年前

    我正在Silverlight应用程序中使用MVVM。当控件可见性需要由数据管理时,我将其“可见性”属性连接到对象的相应属性:

    XAML编号:

    <TextBlock Text="Price" Visibility="{Binding PriceVisibility, Mode=OneWay}"/>
    <TextBox Text="{Binding TicketPrice, Mode=TwoWay}" Visibility="{Binding PriceVisibility, Mode=OneWay}"/>
    

    public string PriceVisibility { get { return PriceVisible ? "Visible" : "Collapsed"; } }
    

    但从我的角度来看,返回Visibility属性的字符串表示并不是最好的方法。

    请问有没有更好的办法?

    2 回复  |  直到 15 年前
        1
  •  9
  •   Rohan West    15 年前

    我只是用反射器检查了P中的类型转换器RecentationFramework.dll

    已经有一个实现可以在布尔值和可见性之间转换。您应该能够在silverlight应用程序中使用它。

    public sealed class BooleanToVisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            bool flag = false;
            if (value is bool)
            {
                flag = (bool) value;
            }
            else if (value is bool?)
            {
                bool? nullable = (bool?) value;
                flag = nullable.HasValue ? nullable.Value : false;
            }
            return (flag ? Visibility.Visible : Visibility.Collapsed);
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return ((value is Visibility) && (((Visibility) value) == Visibility.Visible));
        }
    }
    
        2
  •  5
  •   Bill the Lizard    14 年前

    public class BoolVisibilityConverter : IValueConverter{
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture){
            bool isVisible = (bool)value;
            return isVisible ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){
            System.Windows.Visibility currVisibility = (System.Windows.Visibility)value;
            return (currVisibility == System.Windows.Visibility.Visible);
        }
    }
    

    现在要使用它,您需要将它作为资源添加到XAML代码中。

    <UserControl.Resources>
        <Helpers:BoolVisibilityConverter x:Key="boolVisibilityConverter" />
    </UserControl.Resources>
    

    <TextBlock Text="Price" Visibility="{Binding PriceVisibility, Mode=OneWay, Converter={StaticResource boolVisibilityConverter}}"/>
    
    <TextBox Text="{Binding TicketPrice, Mode=TwoWay}" Visibility="{Binding PriceVisibility, Mode=OneWay, Converter={StaticResource boolVisibilityConverter}}"/>
    
    推荐文章