C# 设置动态创建的控件的Datacontext

C# 设置动态创建的控件的Datacontext,c#,wpf,C#,Wpf,我有一个包含画布控件的UserControl(Map)。我正在从代码隐藏处动态地向画布添加一个控件(门) Binding dataContextBinding = new Binding(); dataContextBinding.RelativeSource = new RelativeSource(RelativeSourceMode.Self); dataContextBinding.Path = new PropertyPath("DataContext

我有一个包含画布控件的UserControl(Map)。我正在从代码隐藏处动态地向画布添加一个控件(门)

 Binding dataContextBinding = new Binding();
        dataContextBinding.RelativeSource = new RelativeSource(RelativeSourceMode.Self);
        dataContextBinding.Path = new PropertyPath("DataContext.SelectedLevelModule.Gate");
        dataContextBinding.Mode = BindingMode.TwoWay;
        dataContextBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
        BindingOperations.SetBinding(gate, DataContextProperty, dataContextBinding);
我希望Gate对象DataContext是映射的DataContext的“Gate”属性。这是在代码隐藏中完成的

 Binding dataContextBinding = new Binding();
        dataContextBinding.RelativeSource = new RelativeSource(RelativeSourceMode.Self);
        dataContextBinding.Path = new PropertyPath("DataContext.SelectedLevelModule.Gate");
        dataContextBinding.Mode = BindingMode.TwoWay;
        dataContextBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
        BindingOperations.SetBinding(gate, DataContextProperty, dataContextBinding);
此代码块运行后,gate.DateContext为null。。。 有什么方法可以做到这一点吗?画空白。。 谢谢
Harold

您正在将属性路径设置为
DataContext.SelectedLevelModule.Gate
。然后将绑定分配给
DataContextProperty
。我认为现在的路径是
gate.DataContext.DataContext.SelectedLevelModule.gate

尝试从
属性路径中删除DataContext,看看是否可以修复它。您已经将其分配给DataContext,不必在路径中指定它

var dataContextBinding = new Binding();
dataContextBinding.Path = new PropertyPath("SelectedLevelModule.Gate");
BindingOperations.SetBinding(gate, DataContextProperty, dataContextBinding);