在Silverlight中,除了ListBox之外,还可以使用哪些结构进行绑定?

时间:2010-04-18 11:31:59

标签: silverlight

我需要简单地将属性的内容提供给Silverlight中的自定义用户控件。

我的控制是这样的:

<UserControl x:Class="SilverlightApplication.Header"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignWidth="300" d:DesignHeight="120">

<Grid x:Name="Header_Layout">
    <StackPanel x:Name="hiHeaderContent" Width="Auto" Margin="73,8,8,8">
        <TextBlock x:Name="User:" Text="{Binding name}" />
</StackPanel>
</Grid>

我尝试从另一个控件使用此用户控件,我尝试将参数“name”传递给之前的UserControl(“Header”)。

我不需要创建“ListBox”,因为我只有1个标题,所以我尽量避免这样做:

            <ListBox x:Name="HeaderListBox" Grid.Row="0">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <SilverlightApplication:Header/>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

使用以下方式发送“用户”帐户:

HeaderListBox.ItemsSource = name;

我可以使用其他任何结构而不是ListBox来传递参数一次吗?它不会是一个列表,它只是一个标题......

谢谢!

2 个答案:

答案 0 :(得分:1)

此代码段不会按照您的预期执行 ListBox.ItemsSource需要是一个集合,sicne我假设“name”是String类型,ListBox实际上绑定到一个chars集合。

尝试更改以下2行以使用正确的DataBinding:

1. HeaderListBox.ItemsSource = new string[] { name };
2. Text="{Binding}"

第一次更改是必需的,因此ItemsControl(如ListBox)将绑定到多个项目,即集合。
第二个更改是必需的,因为UserControl无法知道属性标识符“name”,因为您只是分配了一个值。

您似乎遇到了DataBinding的基本问题,请允许我建议您查看Silverlight.net上的一些优秀参考资料: http://www.silverlight.net/learn/quickstarts/bindingtocontrols/ http://www.silverlight.net/learn/videos/all/databinding-and-datatemplates-in-xaml
http://www.silverlight.net/learn/videos/all/an-overview-of-databinding-and-datatemplates-using-expression-blend
http://www.silverlight.net/learn/videos/all/databinding-to-control-properties

答案 1 :(得分:0)

您可以直接在UserControl上使用DataContext - 属性:

<SilverlightApplication:Header DataContext="{Binding name}" />