复杂的后期绑定

时间:2016-01-30 17:21:28

标签: c# wpf binding

我有以下两难困境。我已将数据提取到DataTable。然后将该数据绑定到设计器中的ComboBox.ItemsSource。然后我创建了一个包含多个文本框,复选框和其他内容的用户控件。现在,用户控件将在运行时更改,具体取决于最终用户选择的选项。

我需要弄清楚(并且一直在逃避我)是如何绑定用户控件' DataContext在运行时ComboBox.SelectedItem,以便在添加用户控件时,用户可以在ComboBox中选择一些内容,并更新用户控件上的所有控件。

任何帮助都将不胜感激。

其他信息:

每当用户点击列表框中的项目时,都会运行以下代码:

    /// <summary>
    /// Adds the passed user control to the appropriate grid location
    /// </summary>
    /// <param name="aUC"><seealso cref="System.Windows.Controls.UserControl"/> to add to the grid</param>
    private void AddControl ( UserControl aUC ) {

        // verifies that there are child controls, I can
        // get an error if I don't perform this check ebfore
        // attempting to remove all of the bindings
        if ( this.pnlControls.Children.Count > 0 )
            BindingOperations.ClearAllBindings ( this.pnlControls.Children [ 0 ] );

        // remove all of child controls from the grid
        this.pnlControls.Children.Clear ( );

        // here I attempt to beind the datacontext of the given user control
        // to the data context of the 
        BindingOperations.SetBinding ( aUC , UserControl.DataContextProperty , new Binding ( "SelectedItem" ) { Source = cbxReport } );

        // finally...add the control
        this.pnlControls.Children.Add ( aUC );
    }

现在,在用户控件的XAML中,我有以下文本框:

 <TextBox Grid.Column="1" Grid.ColumnSpan="5" Margin="2.5" DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext}" Text="{Binding Path='Report Title'}"/>

我认为这是它没有正确设置的地方。我在this.pnlControls.Childre.Add(aUC);之后设置了断点,并且相应的值始终位于DataContext属性中。

1 个答案:

答案 0 :(得分:1)

我弄清楚问题是什么。 AncestorType被设置为错误的东西......这意味着我一直在做正确的事情。谢谢!