【问题标题】:UserControl In List Binding列表绑定中的用户控件
【发布时间】: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


【解决方案1】:

在你做的时候总结一下cmets:

this.DataContext = DocField = new DocFieldString("ctorDocFieldString", "ctorDocFieldStringValue");

您覆盖了原本会被继承的DataContext 值。实际上,您甚至不需要绑定UserControlDataContext,因为它应该通过可视树继承

<local:UserControlDocFieldBaseB/> 

【讨论】:

    猜你喜欢
    • 2012-03-03
    • 2014-11-28
    • 2013-06-17
    • 2011-02-26
    • 2012-06-20
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多