我已经创建了一个WPF UI。 MainWindow.xaml.cs
中包含以下代码:
namespace AWPFProject
{
public partial class MainWindow : Window
{
private readonly ServiceLogic serviceLogic;
public MainWindow()
{
InitializeComponent();
serviceLogic = new ServiceLogic ();
}
}
}
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。我还需要做些什么才能在我的列表中获取这些信息?
答案 0 :(得分:7)
您需要更改一些内容以使其在您的方案中正常工作:
为您的窗口设置正确的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-class具有正确的属性。将以下内容添加到User.cs:
public string Name
{
get { return _name; }
set { _name = value; }
}
答案 1 :(得分:1)
此处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}" />
在Binding中我删除了ServiceLogic,因为SL代表数据项。和路径 - 是物业的路径。
答案 2 :(得分:1)
我认为您需要设置ListBox的“DisplayMemberPath”属性。