2016-07-06 107 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} –

相關問題