我的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 对象保留在代码隐藏中。如何将其传递给每个用户项?
答案 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}
进行绑定