C#WPF Datacontext绑定动态元素

C#WPF Datacontext绑定动态元素,c#,wpf,dynamic,data-binding,datacontext,C#,Wpf,Dynamic,Data Binding,Datacontext,我有一个充满动态编辑器的stackpanel。编辑器(文本框、日期选择器等)中的值基于列表框中的项目。我根据类及其绑定到listbox的属性创建这些编辑器 “呈现的”XAML代码如下所示: <StackPanel Name="LeftEditorStack"> <StackPanel Name="OuterPanelFirstname"> <RadioButton Name="FirstnameEnabled"></RadioBu

我有一个充满动态编辑器的stackpanel。编辑器(文本框、日期选择器等)中的值基于列表框中的项目。我根据类及其绑定到listbox的属性创建这些编辑器

“呈现的”XAML代码如下所示:

<StackPanel Name="LeftEditorStack">
    <StackPanel Name="OuterPanelFirstname">
        <RadioButton Name="FirstnameEnabled"></RadioButton>

        <!--or any other possible FrameWorkElement-->
        <TextBox></TextBox>
    </StackPanel>
</StackPanel>
这意味着
LeftEditorStack
的数据上下文是
文本框
绑定的真正来源。这很好,但是当我更改
LeftEditorStack
DataContext
时,
TextBox
不会得到更新。更新发生在
SelectionChanged
事件中:

private void lb_left_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    this.LeftEditorStack.DataContext = null;
    this.LeftEditorStack.DataContext = this.lb_left.SelectedItem;
}
更新
DataContext
时,如何使
TextBox
更改其值?我无法从
BindingExpression
使用
UpdateTarget
,因为包含我的编辑器的usercontrol无法直接访问动态编辑器。 设置
绑定模式
更新资源记录器
也不会改变此行为

更新
正如Grx70指出的那样,我的
anstorlevel
是错误的。在我将
AncestorLevel
设置为2之后,它工作正常。

实际上,由于您在绑定上设置了
AncestorLevel=1
,因此
OuterPanelFirstname
的数据上下文是绑定的源,这是从
LeftEditorStack
继承的,除非它被明确设置-你确定永远不会是这样吗?这是一个问题,我将尝试将其更改为
AncestorLevel=2
,所有编辑器的基本结构都是相同的。谢谢,
AncestorLevel=2
解决了我的问题,由于您在绑定上设置了
AncestorLevel=1
,因此
OuterPanelFirstname
的数据上下文是绑定的源,它继承自
LeftEditorStack
,除非它是显式设置的-您确定永远不会这样吗?这是一个要点,我将尝试将其更改为
AncestorLevel=2
,所有编辑器的基本结构都是一样的。谢谢,
AncestorLevel=2
解决了我的问题
private void lb_left_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    this.LeftEditorStack.DataContext = null;
    this.LeftEditorStack.DataContext = this.lb_left.SelectedItem;
}