2

我创建了一个 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}" />

当我运行应用程序时,列表仍然是空的。我还需要做什么才能在我的列表中获取该信息?

4

3 回答 3

7

您需要更改一些内容才能使其在您的场景中发挥作用:

  1. 为您的窗口设置正确的 DataContext:

    public MainWindow()
    {   
        InitializeComponent();
        DataContext = new ServiceLogic();
    }
    
  2. 确保它ServiceLogic有一个名为 Users的公共属性:

    public List<User> Users { get; set; }
    

    如果您想在运行时向此列表添加/删除项目,请考虑使用 ,ObservableCollection<T>因为这将自动通知 UI 任何更改。

  3. 更新 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>
    

  4. 使用时DisplayMemberPath,请确保 User-class 具有正确的属性。将以下内容添加到 User.cs:

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    } 
    
于 2013-02-20T15:25:44.680 回答
1

我认为您需要设置 ListBox 的“DisplayMemberPath”属性。

于 2013-02-20T15:27:39.513 回答
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 代表数据项。并且 Path - 是属性的路径。

于 2013-02-20T15:10:14.943 回答