C#WPF Datacontext绑定动态元素

时间:2016-01-05 15:21:20

标签: c# wpf dynamic data-binding datacontext

我有一个充满动态编辑器的stackpanel。编辑器内的值(TextBoxes,DatePickers等)基于列表框中的项目。我根据绑定到列表框的类及其属性创建这些编辑器。

“渲染”的XAML代码是这样的:

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

        <!--or any other possible FrameWorkElement-->
        <TextBox></TextBox>
    </StackPanel>
</StackPanel>

TextBox有一个绑定在代码后面的数据绑定。

editorBinding = new Binding();
editorBinding.Path = new PropertyPath(String.Format("DataContext.{0}", properties[i].Name));
editorBinding.RelativeSource = new RelativeSource() { Mode = RelativeSourceMode.FindAncestor, AncestorType = typeof(StackPanel), AncestorLevel = 1 };
//editorAttribute is a custom Attribute that contains some information about the type of the Editor, BindingProperty, Position, Size and other stuff
editor.SetBinding(editorAttribute.BindingProperty, editorBinding);

这意味着LeftEditorStack的Datacontext是绑定TextBox的真正来源。这工作正常,但是当我更改DataContext的{​​{1}}时,LeftEditorStack没有获得更新。更新发生在TextBox事件:

SelectionChanged

private void lb_left_SelectionChanged(object sender, SelectionChangedEventArgs e) { this.LeftEditorStack.DataContext = null; this.LeftEditorStack.DataContext = this.lb_left.SelectedItem; } 更新后,如何让TextBox更改其值?我无法使用DataContext中的UpdateTarget,因为包含我的编辑器的用户控件无法直接访问动态编辑器。 同时设置BindingExpressionBindingMode并未改变此行为。

更新 正如Grx70指出我的UpdateSourceTrigger错了。将AncestorLevel设置为2后,它可以正常工作。

0 个答案:

没有答案