2010-09-07 115 views
8

我在我的Silverlight應用程序中使用MVVM。當控制可見性需要通過數據進行管理,我連接它的 '能見度' 屬性對象的相應屬性:Silverlight 4:如何切換控件的可見性

XAML:

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

代碼隱藏(C#):

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

但從我的角度來看,可見性屬性的返回字符串表示不是最好的方法。

請問如果有更好的方法可以請教一下嗎?

謝謝!

回答

9

我只是用反射鏡檢查的類型轉換器在PresentationFramework.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

感謝您的例子。你知道爲什麼ReSharper告訴:「nullable.HasValue」總是對的嗎? – Budda 2010-09-07 23:51:09

5

我所面臨的結合一個布爾值visibility屬性的問題,所以我已經實現了我自己的布爾能見度轉換器,我使用它與我的大多數應用程序。

下面的類添加到您的應用程序:

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}}"/> 
+0

謝謝你的全部例子(我也不知道XAML標記)。 – Budda 2010-09-08 00:35:08