WPF数据绑定到其他类



我已经创建了一个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。我还需要做些什么才能在我的列表中获得这些信息?

为了在您的场景中实现这一点,您需要更改一些内容:

  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类具有正确的属性。将以下内容添加到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"属性。

相关内容

  • 没有找到相关文章

最新更新