2016-07-06 95 views
0

我有以下代码:在XAML绑定的DataContext用的DataContext在代码中设置

ProcessMainWindow.xaml.cs

public ProcessMainWindow(SourceTableRowInfo rowContent) 
    { 
     InitializeComponent(); 
     this.DataContext = rowContent; 
    } 

ProcessMainWindow.xaml

<!--Insert Code----> 
    <TabItem x:Name="postProcessTab" Header="Post-Processes"> 
      <local:PostProcessUserControl PostProcessItem="{Binding PostProcess, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
     </TabItem> 

所以RowContent在其中有一个名为PostProcess的元素。我试图将该元素绑定到UserControl依赖属性,但无法使绑定工作。根据我正在阅读的内容here (Using the DataContext)我的理解是,我所拥有的应该可以工作,但我无法完成它的工作。所以我误解了它在说什么?我已经阅读了其他几页,但仍然无法弄清楚。

我也曾尝试:

<!--Insert Code----> 
    <TabItem x:Name="postProcessTab" Header="Post-Processes"> 
      <local:PostProcessUserControl PostProcessItem="{Binding, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Path=PreProcess}" /> 
     </TabItem> 

如果这是正确的,我想我在我的代码的其他地方有一个错误。我还没有完全理解WPF中的数据绑定,以了解是否属于这种情况,尽管如此,任何帮助将不胜感激。

+3

这应该可以工作,但值得指出的是XAML设计器不会使用该构造函数。 – Spivonious

+0

“RowContent有一个名为PostProcess的元素”:这是否意味着'SourceTableRowInfo'具有一个公共属性,具有一个名为'PostProcess'的公共'get'? –

+0

@EdPlunkett是的,这是正确的。 –

回答

1

一件事是尝试把一个跟踪上绑定:

PostProcessItem="{Binding PostProcess, PresentationTraceSources.TraceLevel=High}. 

然后寻找它告诉你在运行时在VS.输出窗格这可以帮助您确定DataContext与您认为不符的情况,或者您的Path拼写错误 - 编译器在C#中捕获的所有简单内容,但在编译时无法在后期绑定/像XAML这样的鸭型mi mi病。

一旦你完成了它们,不要将这些痕迹留在绑定上;他们真的可以放慢速度。或者至少设置TraceLevel=None,如果您认为稍后会回来,那么可以省掉麻烦。

+0

另外一个问题,你可能知道答案Postpro cess的类型是PostProcess(元素是Name,Description),如果我想绑定到这些特定的元素,它会是{Binding Postprocess.Name ....}吗? –

+1

@ K.Fenster是的。 Binding的默认构造函数参数是Path,这意味着它听起来像 - 因此这是隐式的{{Binding Path = Postprocess.Name} –

相关问题