列表绑定中的WPF列表

时间:2014-11-20 13:06:45

标签: c# wpf xaml

我使用嵌套的ListBox进行数据绑定, 这是我的ListBox

<ListBox x:Name="lst1" ItemsSource="{Binding ListDS}" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Disabled" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical" Margin="10">
                <TextBlock Text="{Binding Name}"/>
                <ListBox Height="300" Width="200" ItemsSource="{Binding userFiles }" Margin="0,10" >
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Margin="0,10,0,0">
                                <TextBlock Text="{Binding Name}"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
                <Button Content="Print" Width="75" HorizontalAlignment="Right" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Margin="0,0,0,0" Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

这些是我的实体

public class UsersInfo
{
    public long Id { get; set; }
    public string Name { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime DateUploaded { get; set; }
    public List<UsersFiles> userFiles { get; set; }
}
public class UsersFiles
{
    public long Id { get; set; }
    public string Name { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime DateDownloaded { get; set; }
}

在我的ViewModel中,我有这个

public List<UsersInfo> ListDS{ get; set; }

我在我的ViewModel的构造函数中初始化它,这就是我填充数据的方式

UsersInfo entity = new UsersInfo();
entity.MediaFiles = new List<UsersFiles>();
UsersFiles mFiles = new UsersFiles();                           
mFiles.Name = "abc";
mFiles.Id = 1
entity.Name = "User name";
entity.MediaFiles.Add(mFiles);
ListDS.Add(entity);

问题是,ListBox显示为空白,没有显示任何内容,甚至是打印按钮。 当我在其中添加ListBoxItem时,它显示完美。 我在数据绑定中做错了什么?

2 个答案:

答案 0 :(得分:0)

您必须实现INotifyPropertyChanged接口。当属性发生变化时,界面将通知视图。

但是如果集合中有任何新项目,您希望通知您的视图,因此最好使用可以为您执行此操作的集合。使用ObservableCollection<UserInfo>展示您的ListDS

public ObservableCollection<UserInfo> ListDS
{
    get { return listDS; }
    set
    {
        listDS = value;
        // Call OnPropertyChanged whenever the property is updated
        OnPropertyChanged("ListDS");
    }
}

// Create the OnPropertyChanged method to raise the event 
protected void OnPropertyChanged(string name)
{
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
    {
        handler(this, new PropertyChangedEventArgs(name));
    }
}

答案 1 :(得分:-1)

假设您的视图模型代码是正确的,您只需要更改它:

<ListBox Height="300" Width="200" ItemsSource="{Binding ListDS2}" Margin="0,10" >

到此:

<ListBox Height="300" Width="200" ItemsSource="{Binding userFiles}" Margin="0,10" >

它会起作用。注意不正确的绑定值!