您可以阅读我的解决方案here的完整结构,但这里是快速参考:
Account.cs
类库中创建了一个类Entities
。 Core
,其中包含一个类AccountController.cs
来自Sql Server表的帐户。 AccountWindowController.cs
类库中创建了一个类Gui.Wpf.Controllers
。
它包含List<Account> Accounts
属性并调用GetAccounts()
AccountController
中填充该列表的方法。 AccountWindow.xaml
类库中创建了Gui.Wpf
。这个WPF窗口
包含名为ListBox
的{{1}}。 我想将AccountsListBox
的列表框数据绑定到AccountWindow
中的列表,但我不知道如何。这是相关的代码:
AccountWindow.xaml
AccountWindowController
AccountWindow.xaml.cs
<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>
AccountWindowController.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
new Gui.Wpf.Controllers.AccountWindowController();
}
}
感谢您的帮助。
答案 0 :(得分:1)
ItemsSource
必须是IEnumerable
。 AccountsCollection
资源是包含要使用的属性的类。为此,您需要绑定到该属性,并使用该资源作为绑定源:
<ListBox Name="AccountsListBox"
Margin="12,38,12,41"
ItemsSource="{Binding Accounts, Source={StaticResource ResourceKey=AccountsCollection}}" />
您还应该在AccountWindowController上实现INotifyPropertyChanged
(并在Accounts setter中引发PropertyChanged
,这样如果您设置Accounts属性,ListBox
将重新绑定到新集合。如果在运行时修改了Accounts集合,它应该是ObservableCollection
。
答案 1 :(得分:0)
看起来你几乎就在那里。尝试更改
ItemsSource="{StaticResource ResourceKey=AccountsCollection}" />
向
ItemsSource="{Binding Source={StaticResource ResourceKey=AccountsCollection}, Path=Accounts}" />