2008-08-11 121 views
11

任何人都可以指向我一個很好的資源(或拋出一個線索),告訴我如何在WPF中的DataBinding控件(組合框,列表框等)?當我所有的WinForms優點都從我手中奪走時,我有點不知所措,而且我並不是那麼光明......WPF Databinding

回答

3

我發現在Windows Client .Net同樣很棒的教程視頻。前段時間,Dot Net Rocks TV也覆蓋了它。

+0

這些鏈接現在看起來很亂(Windows Client .NET鏈接甚至無法在DNS上解析) – Ortund 2017-07-03 14:59:56

5

我發現WPF數據綁定的最佳資源是Bea Costa's blog。從第一篇文章開始閱讀。這很棒。

3

在後面的代碼中 - 將列表框的DataContext設置爲與您綁定的集合相等。

private void OnInit(object sender, EventArgs e) 
{ 
    //myDataSet is some IEnumerable 

    // myListBox is a ListBox control. 
    // Set the DataContext of the ListBox to myDataSet 
    myListBox.DataContext = myDataSet; 
} 

在XAML中,Listbox可以使用「Binding」語法聲明它綁定的屬性。

<ListBox Name="myListBox" Height="200" 
    ItemsSource="{Binding Path=BookTable}" 
    ItemTemplate ="{StaticResource BookItemTemplate}"/> 
3

還有一些更多的鏈接,以防萬一上面不足夠了:

Windows Presentation Foundation - Data Binding How-to Topics
- 約30從MSDN「如何做」的文章。
「在本節中的主題描述瞭如何使用數據綁定到從各種在公共語言運行庫(CLR)對象和XML形式的數據源的結合元件,以數據」。

Moving Toward WPF Data Binding One Step at a Time
- 從WPF guru Josh Smith
「這篇文章解釋了WPF數據綁定的絕對基礎知識,它展示瞭如何執行同一個簡單任務的四種不同方式,每一次迭代更接近最緊湊的僅有XAML的實現。沒有WPF數據綁定的經驗。「

2

有你需要做三件事情:

  1. 綁定組合框的選項列表的的ItemsSource。
  2. 將SelectedItem綁定到保存選擇的屬性。
  3. 將ComboBox.ItemTemplate設置爲ComboBoxItem的DataTemplate。

因此,舉例來說,如果你的數據上下文對象是具有電子郵件地址的人,你要選擇自己的主,你可能有個教學班,這些簽名:

public class EmailAddress 
{ 
    public string AddressAsString { get; set; } 
} 

public class Person 
{ 
    public IEnumerable<EmailAddress> EmailAddresses { get; } 
    public EmailAddress MainEmailAddress { get; set; } 
} 

然後,你可以創建這樣的組合框:

<ComboBox ItemsSource="{Binding EmailAddresses}" SelectedItem="{Binding MainEmailAddress}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <ComboBoxItem Content="{Binding AddressAsString}"/> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

現在,你需要在這兩個Person和EmailAddress的實施INotifyPropertyChanged的。對於EmailAddresses集合,您可以使用ObjservableCollection將其返回。

或者作爲替代方案,您可以使用Update Controls .NET。這是一個替代數據綁定並且不需要INotifyPropertyChanged的開源項目。您可以使用任何有意義的集合來支持EmailAddresses屬性。除了導入UpdateControls.XAML命名空間並將{Binding ...}替換爲{u:Update ...}之外,XAML的工作方式與上述相同。