WPF使用DataTemplate绑定到ListBox的IEnumerable

时间:2017-09-04 05:25:08

标签: c# .net wpf xaml listbox

我正在尝试将IEnumerable类UserList绑定到XAML中的ListBox,但我无法解析该对象的名称。我的xaml代码如下:

            <ListBox DockPanel.Dock="Left" x:Name="UserListBox" Width="400"
                     ItemsSource="{Binding Source={StaticResource userList}}"
                     ItemTemplate="{StaticResource UserListTemplate}">

            </ListBox>

我也在MainWindow.xaml.cs中实例化了userList,但我想我做的不对。意图是从UserList读取ListBox并从该IEnumerable创建用户列表。我该如何解决这个问题?

public MainWindow()
    {
        InitializeComponent();
        DataConnection.CreateAndOpenDB();
        src.UserList userList = new src.UserList();


    }

1 个答案:

答案 0 :(得分:1)

StaticResource扩展无法解析局部变量。

创建如下所示的UserList属性,并将Window的DataContext设置为this。如果您希望在设置DataContext后能够添加或删除元素,则UserList类应实现INotifyCollectionChanged接口。它可以通过派生ObservableCollection来实现。

public src.UserList UserList { get; } = new src.UserList();

public MainWindow()
{
    InitializeComponent();
    DataConnection.CreateAndOpenDB();
    // add elements to UserList here

    DataContext = this;
}

然后像这样在XAML中编写Binding:

ItemsSource="{Binding UserList}"

请参阅Data Binding Overview了解相关信息。