Bud*_*dda 8 silverlight binding visibility mvvm silverlight-4.0
我在Silverlight应用程序中使用MVVM.当需要通过数据管理控件可见性时,我将其"可见性"属性连接到对象的相应属性:
XAML:
<TextBlock Text="Price" Visibility="{Binding PriceVisibility, Mode=OneWay}"/>
<TextBox Text="{Binding TicketPrice, Mode=TwoWay}" Visibility="{Binding PriceVisibility, Mode=OneWay}"/>
Run Code Online (Sandbox Code Playgroud)
CodeBehind(C#):
public string PriceVisibility { get { return PriceVisible ? "Visible" : "Collapsed"; } }
Run Code Online (Sandbox Code Playgroud)
但是从我的角度来看,返回Visibility属性的字符串表示并不是最好的方法.
你能告诉我有没有更好的方法?
谢谢!
我只是使用Reflector来检查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));
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我遇到了将布尔值绑定到visibility属性的问题,所以我已经实现了自己的布尔值到Visibility Converter,我在大多数应用程序中使用它.
将以下类添加到您的应用程序:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在要使用它,您需要将其作为XAML代码中的资源添加.
<UserControl.Resources>
<Helpers:BoolVisibilityConverter x:Key="boolVisibilityConverter" />
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)
在您的示例中使用以下内容:
<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}}"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10066 次 |
| 最近记录: |