【发布时间】:2014-07-16 15:48:40
【问题描述】:
简单的用户控制
<Grid>
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Path=Name}"/>
<TextBlock Text="{Binding Path=DispValue}"/>
</StackPanel>
</Grid>
public partial class UserControlDocFieldBaseB : UserControl
{
public DocField DocField { get; set; }
public UserControlDocFieldBaseB()
{
InitializeComponent();
this.DataContext = DocField = new DocFieldString("ctorDocFieldString", "ctorDocFieldStringValue");
}
public UserControlDocFieldBaseB(DocField docField)
{
InitializeComponent();
DocField = docField;
this.DataContext = DocField;
}
}
我想将它绑定到一个列表
这具有正确数量的项目,但值都来自默认 ctor ()
如何让 UserControlDocFieldBaseB 使用 DocFields?
<ListBox Grid.Row="2" Grid.Column="1"
ItemsSource="{Binding Path=DocFields}">
<ListBox.ItemTemplate>
<DataTemplate>
<local:UserControlDocFieldBaseB DataContext="{Binding Path=.}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这适用于单个项目(ucB2 是 UserControlDocFieldBaseB)
ucB2.DataContext = docFieldSelected;
【问题讨论】:
-
当您执行
this.DataContext = DocField时,您会覆盖DataContext。你需要吗? -
@dkozl 如果我取出 DataContext="{Binding Path=.}" 那么没有区别 - 仍然获得在默认 ctror() 中分配的值
-
@dkozl 这就是答案。请发帖,我会接受的。
-
@dkozl 抱歉看到你的评论!
标签: .net wpf binding user-controls