如何将额外的属性传递给Silverlight中DataTemplate内的usercontrol

时间:2010-10-30 14:58:16

标签: silverlight

我的xaml中有一个Itemscontrol,我在ItemsControl的DateTemplate中调用了一个用户控件,如下所示

    <ScrollViewer Margin="0,0,0,0" BorderThickness="0">
        <ItemsControl x:Name="itemsStackPanel">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <controls:UserItem Margin="0, 5, 0, 3"></controls:UserItem>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </ScrollViewer>

我已经为ItemsControl分配了一个列表。

    this.itemsStackPanel.ItemsSource = usersList;

现在我想将一些额外的属性传递给我的用户控件,这是在DataTemplate中,如下所示,我该怎么做?

    <controls:UserItem Margin="0, 5, 0, 3" CurrentColumnInfo={Binding oColumnInfo}></controls:UserItem>

oColumnInfo 对象保留在代码隐藏中。如何将其传递给每个用户项?

2 个答案:

答案 0 :(得分:1)

使用下一个练习(它喜欢ria控件):

  

首先,为oColumnInfo创建对象提供程序:

公共类ObjProvider:控制 { public object Object {get;组; } }

  

其次,在你的标记中创建ObjProvider的实例:

&LT; !-Extra property provider - &gt;

&LT; p:ObjProvider x:Name =“provider”Width =“0”Height =“0”/&gt;

  

第三,在您的项目模板中:

&LT; controls:UserItem Margin =“0,5,0,3”CurrentColumnInfo = {Binding ElementName = provider,Path = Object} /&gt;

  

第四,在代码背后

provider.Object = oColumnInfo;

就是这样

  

另一种方式(不太好)是:

     

首先,在您的项目模板中

&LT; controls:UserItem Margin =“0,5,0,3”CurrentColumnInfo = {Binding Source = {StaticResource oColumnInfo} /&gt;

  

其次,在代码背后:

     

this.Resources.Add(“oColumnInfo”,oColumnInfo);

     

//注意!!!:你必须在构造函数&gt;之前在InitializeComponent()之前完成,这就是为什么这种方式不那么灵活   并从后面的代码设置资源并在标记中绑定它不是一个好习惯

答案 1 :(得分:0)

oColumnInfo应该是userList的一部分,如果你想使用{Binding Path=oColumnInfo}进行绑定