我已经创建了一个WPF UI。MainWindow.xaml.cs
中存在以下代码:
namespace AWPFProject
{
public partial class MainWindow : Window
{
private readonly ServiceLogic serviceLogic;
public MainWindow()
{
InitializeComponent();
serviceLogic = new ServiceLogic ();
}
}
}
服务逻辑是我的核心课程。从那里,方法或类被调用来处理数据库管理之类的事情。
现在,ServiceLogic类具有我想要绑定到的值。例如,我有一个组合框,可以在其中显示我的用户。XAML如下所示:
<ListBox Height="100" HorizontalAlignment="Left" Margin="6,44,0,0"
Name="listBox_detected" VerticalAlignment="Top" Width="120"
ItemsSource="{Binding Path=ServiceLogic.Users}" />
当我运行应用程序时,列表仍然是emtpy。我还需要做些什么才能在我的列表中获得这些信息?
为了在您的场景中实现这一点,您需要更改一些内容:
-
为您的窗口设置正确的DataContext:
public MainWindow() { InitializeComponent(); DataContext = new ServiceLogic(); }
-
确保
ServiceLogic
具有名为Users:的公共属性public List<User> Users { get; set; }
如果要在运行时向该列表添加/删除项,请考虑使用
ObservableCollection<T>
,因为这将自动通知UI任何更改。 -
更新xaml的绑定逻辑,以便绑定到正确的列表。还要设置
DisplayMemberPath
属性或添加一个模板,以便对象显示得很好:<ListBox ItemsSource="{Binding Path=Users}" DisplayMemberPath="Name"/>
或
<ListBox ItemsSource="{Binding Path=Users}"> <ListBox.ItemTemplate> <DataTemplate> <...your data template, like grid or stackpanel/> </DataTemplate> </ListBox.DataTemplate>
-
使用
DisplayMemberPath
时,请确保User类具有正确的属性。将以下内容添加到User.cs:public string Name { get { return _name; } set { _name = value; } }
此处ItemsSource="{Binding Path=ServiceLogic.Users}"
表示数据具有公共属性ServiceLogic
其次,您的数据是通过DataContext
获取的
更改构造函数:
public MainWindow()
{
InitializeComponent();
serviceLogic = new ServiceLogic ();
DataContext = serviceLogic;
}
并更改与以下内容的绑定:
<ListBox Height="100" HorizontalAlignment="Left" Margin="6,44,0,0"
Name="listBox_detected" VerticalAlignment="Top" Width="120"
ItemsSource="{Binding Path=Users}" />
在绑定中,我删除了ServiceLogic,因为SL代表数据项。Path-是属性的路径。
我认为您需要设置ListBox的"DisplayMemberPath"属性。