2013-10-22 68 views
0

我有一个名为Books的书。该代码是在这里:插入多个自定义项目到列表视图

class Books 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string description { get; set; }  
    } 

背后我的表单的代码看起来是这样的:(感谢Omribitan)

public partial class MainWindow : Window 
    { 

     private ObservableCollection<Books> Books { get; set; } 
     public MainWindow() 
     { 
      InitializeComponent(); 

     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      var db = new DataClasses1DataContext(); 
      var query = from p in db.books 
         select new Books 
         { 
          Id = p.id, 
          Name = p.name, 
          description = p.description 
         }; 

      Books = new ObservableCollection<Books>(query); 
      listview1.ItemsSource = Books; 

      } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      var book = listview1.SelectedItem as Books; 
      MessageBox.Show(book.Id.ToString()); 
     } 

的XAML看起来是这样的:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:test" xmlns:System="clr-namespace:System;assembly=mscorlib" x:Class="test.MainWindow" 
     Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"> 
    <Grid> 
     <ListView x:Name="listview1" HorizontalAlignment="Left" Height="100" Margin="126,91,0,0" VerticalAlignment="Top" Width="286"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="BookName" 
         Width="Auto" 
       DisplayMemberBinding="{Binding Name}" /> 
        <GridViewColumn Header="Publisher" 
         Width="Auto" 
       DisplayMemberBinding="{Binding Description}" /> 
       </GridView> 
      </ListView.View> 
     </ListView> 

有了这个代码,我想将我的数据绑定到列表视图。问题是当我运行这个代码时,我的列表视图的第二列是空的。任何人都可以帮助我吗?

+0

不返回匿名类型。创建适当的数据模型或使用现有的数据模型。 –

+1

你可以更具体吗? – Hooman

+1

我没有看到'mydata'我看到一个匿名类型 –

回答

0

首先像@HighCore建议的那样,创建一个适当的数据类型而不是匿名类型。

public class Book 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
} 

创建集合,就像一个ObservableCollection

public ObservableCollection<Book> Books { get; set; } 

你的项目的添加到收藏

var db=new mydataDataContext(); 
var query=from p in db.Book 
select new Book{ 
      Id = p.Id 
      Name = P.Name 
      Description = P.Description 
      }; 
Books = new ObservableCollection<Book>(query); 

接下来,设置的ItemsSourceListView到集合

myListView.ItemsSource = Books; 

ListView应该是这个样子:

<ListView x:Name="myListView"> 
    <ListView.View> 
    <GridView> 
     <GridViewColumn Header="BookName" 
         Width="Auto" 
       DisplayMemberBinding="{Binding Name}" /> 
     <GridViewColumn Header="Publisher" 
         Width="Auto" 
       DisplayMemberBinding="{Binding Description}" /> 
    </GridView> 
    </ListView.View> 
</ListView> 

现在,而不是隐藏标识在第一列,你可以访问它像这样

var book = myListView.SelectedItem as Book; 
book.Id .... 

希望这有助于

+0

对不起,如果语法不正确我没有IDE检查它,但它假设是好的,如果我的记忆不是谎言 –

+0

它创建Observable collection时它给了我一个错误。它说它找不到。我应该使用任何命名空间吗? – Hooman

+0

@ user1929674错误是什么? –

0

感谢亲爱的Omribitan代码,问题出现在xaml的发布者专栏(第二列)中。当我将DisplayMemberBinding =“{Binding Description}”更改为DisplayMemberBinding =“{Binding description}”时,它工作正常。

相关问题