WPF数据绑定到其他类

时间:2013-02-20 14:52:40

标签: c# wpf visual-studio-2010 user-interface

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

3 个答案:

答案 0 :(得分: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; }
    } 
    

答案 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”属性。