2010-11-23 138 views
0

你可以看我的解決方案here的完整結構,但這裏的快速參考:WPF數據綁定:如何將數據綁定到一個集合?

  1. 我在Entities類庫做了一個類Account.cs
  2. 我做了一個類庫CoreAccountController.cs類從Sql Server表中獲取 帳戶。
  3. 我在Gui.Wpf.Controllers類庫中做了AccountWindowController.cs類的類。 它包含List<Account> Accounts屬性,並要求AccountController中的GetAccounts() 方法填充該列表。
  4. 最後,我在Gui.Wpf類庫中做了AccountWindow.xaml。此WPF窗口 包含名爲AccountsListBoxListBox

我想數據將列表框從AccountWindow綁定到AccountWindowController列表中,但我不知道如何。下面是相關的代碼:

AccountWindow.xaml

<Window x:Class="Gui.Wpf.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:controller="clr-namespace:Gui.Wpf.Controllers" 
    Title="Accounts" 
    Width="350" 
    MinWidth="307" 
    MaxWidth="400" 
    Height="500" > 

    <Window.Resources> 
     <controller:AccountWindowController 
      x:Key="AccountsCollection" /> 
    </Window.Resources> 

    <Grid> 
     <ListBox 
      Name="AccountsListBox" 
      Margin="12,38,12,41" 
      ItemsSource="{StaticResource ResourceKey=AccountsCollection}" /> 
    </Grid> 

</Window> 

AccountWindow.xaml.cs

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     new Gui.Wpf.Controllers.AccountWindowController(); 
    } 
} 

AccountWindowController.cs

public class AccountWindowController 
{ 
    //This event is handled in the AccountController.cs 
    //that sets the Accounts property defined below. 
    public event EventHandler GetAccounts; 

    private List<Account> accounts; 
    public List<Account> Accounts 
    { 
     get 
     { 
      GetAccounts(this, new EventArgs()); 
      return accounts; 
     } 
     set 
     { 
      this.accounts = value; 
     } 
    } 

    //Constructor 
    public AccountWindowController() 
    { 
     new AccountController(this); 
    } 
} 

謝謝你的幫助。

回答

1

ItemsSource需求是一個IEnumerableAccountsCollection資源是一個包含要使用的屬性的類。爲了做到這一點,你需要綁定到該屬性,並使用資源作爲綁定的源:(在賬戶setter和提高PropertyChanged

<ListBox Name="AccountsListBox" 
     Margin="12,38,12,41" 
     ItemsSource="{Binding Accounts, Source={StaticResource ResourceKey=AccountsCollection}}" /> 

你也應該在AccountWindowController 實施INotifyPropertyChanged因此如果您設置了Accounts屬性,則ListBox將重新綁定到新集合。如果Accounts集合在運行時被修改,它應該是ObservableCollection

0

它看起來像你幾乎在那裏。嘗試改變

ItemsSource="{StaticResource ResourceKey=AccountsCollection}" /> 

進入

ItemsSource="{Binding Source={StaticResource ResourceKey=AccountsCollection}, Path=Accounts}" /> 
+0

感謝您的回答馬修。更改代碼導致編譯錯誤,並顯示以下錯誤消息:Error解析標記擴展時遇到類型爲「System.Windows.StaticResourceExtension」的未知屬性「路徑」。我應該改變別的東西嗎? – Boris 2010-11-23 19:04:10

+0

道歉,我錯過了一些。請再試一次。 – 2010-11-23 20:34:44