如何绑定stackpanel可见性属性

时间:2011-02-09 08:56:55

标签: silverlight silverlight-4.0

喜 我是silverlight 4的新手。 我在视图中有两个单选按钮,名称为stackpanel1中的Internal和External,它们绑定到我的视图模型。 在stackpanel2我有文本块和按钮。 现在,当我选择内部单选按钮stackpanel2时,我需要的是可见的,而外部选择stackpanel2应该是不可见的。 我如何将stackpanel2可见性属性绑定到我的viewmodel。 请尽快解决问题。

2 个答案:

答案 0 :(得分:1)

@ anju没问题,你必须添加一个新的类继承它与IValueConverter这将是你的bool到可见性转换器,现在你必须绑定StackPanel Visibility属性与您的视图模型中的布尔属性,如下所示:

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:GreenScreenApp.classes" x:Class="GreenScreenApp.one" >
<UserControl.Resources>
    <local:VisibilityConverter x:Key="BoolToVisibilityConverter"/>
</UserControl.Resources>
<Grid DataContext="MyDataSource" x:Name="LayoutRoot" >
    <StackPanel x:Name="stackpanel2" Visibility="{Binding IsVisible, Converter={StaticResource BoolToVisibilityConverter}}">
    </StackPanel>
</Grid>

你应该在数据上下文中有一个名为“IsVisible”的属性。 Converter将转换布尔值和返回可见性值。

转换代码

    public class VisibilityConverter : IValueConverter
{

    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var v = value;

        if (v == "true")
            return "Visible";
        else
            return "Collapsed";

    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

只是想让我知道在我的情况下,转换器类位于项目根目录的“类”文件夹中。 希望它能解决你的问题。

答案 1 :(得分:0)

您必须在数据模型中添加新的Visibility属性,然后将此属性绑定到stackpanel Visibility属性,您还可以将其绑定到布尔属性,但是您需要转换器。 silverlight中的转换器将任何指定的值转换为属性类型的值。

您可以在此处了解如何构建转换器。 http://weblogs.asp.net/dwahlin/archive/2009/08/15/so-what-s-a-silverlight-value-converter-anyway.aspx