2013-04-25 72 views
0

我想動態地創建元素,所以我使用C#代碼behide來創建控件。如何動態創建元素並將其綁定到WPF中?

單選按鈕已創建,我想綁定一些元素(在這種情況下,我使用按鈕)。

這是我的源代碼

/*創建單選按鈕*/

RadioButton secondaryRadio = new RadioButton() 
    { 
     Name = "secondaryRadio_" + orderOfTransport + "_" + orderOfSubTransport, 
     GroupName = "Transport_" + orderOfTransport + "_" + orderOfSubTransport, 
     IsChecked = false, 
    }; 

/*創建綁定對象*/

 Binding userChoice2 = new Binding("IsChecked") 
     { 
      ElementName = "secondaryRadio_" + orderOfTransport + "_" + orderOfSubTransport, 
     }; 

/*創建按鈕,並結合*/

 Button outBoundButton = new Button() 
     { 

      Content = "Select", 
      Name = "inb_button_" + orderOfTransport + "_" + orderOfSubTransport, 
     }; 

     outBoundButton.SetBinding(Button.IsEnabledProperty, userChoice2); 

and this i s從輸出窗口獲得

找不到與參考文獻綁定的來源 'ElementName = secondaryRadio_1_0'。 BindingExpression:路徑=器isChecked; DataItem = null;目標元素是'Button'(Name ='inb_button_1_0'); 目標屬性是「的IsEnabled」(類型「布爾」)

我沒有什麼錯此綁定?我可以使用超過1次的綁定對象嗎?

您的幫助非常感謝:d

+1

您的綁定錯誤告訴您綁定無法在UI中的任何位置找到名爲'「secondaryRadio_1_0」'的元素。該單選按鈕是在創建後添加到用戶界面的嗎?其他要檢查的事情是單選按鈕存在於Button可以訪問的VisualTree中的某處,並且您可能需要確保單選按鈕在綁定被評估之前被呈現。 – Rachel 2013-04-25 19:59:51

+1

'我爲這個綁定做錯了什麼?' - 一切。不要在代碼中創建或操作UI元素。 WPF不是winforms。學習MVVM。 - 免責聲明:對於粗魯無禮和爲人坦率,我只是在聽Pantera。 – 2013-04-25 19:59:58

+0

爲Pantera +1,而不是無禮! – flq 2013-04-25 20:04:03

回答

3

除了指定的ElementName,你應該直接指定綁定的Source

Binding userChoice2 = new Binding("IsChecked") 
{ 
    Source = secondaryRadio 
}; 
+0

非常感謝,這是工作! – neenutna 2013-04-25 20:14:58

0

關於的ElementName:我看不出這兩個UI元素結束在一些常見的可視化樹中 - 你不能指望這與兩個不同的對象一起工作。

作爲忠告的話,幾乎總是不需要「動態」生成UIElements。通常,使用ItemControl的ItemsControl和DataTemplate以及將ItemsSource綁定到某些對象,可以更輕鬆地實現您想要執行的操作。

如果你確實想要做Windows窗體的WPF,那麼你應該遵循Jon的建議。

+0

這次我通過Jon的建議解決了問題,下次我將使用ItemsControl作爲您的建議。感謝您的幫助:D – neenutna 2013-04-26 08:00:49

相關問題