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>

このコードを使用して、データをリストビューにバインドします。問題は、このコードを実行すると、リストビューの 2 番目の列が空になることです。誰か助けてください。

4

2 に答える 2

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);

次に、ItemsSourceあなたListViewの をコレクションに設定します

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>

これで、最初の列の Id を非表示にする代わりに、次のようにアクセスできます

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

お役に立てれば

于 2013-10-22T16:21:55.560 に答える
0

Dear Omribitan コードのおかげで、問題は xaml の発行元の列 (2 列目) にありました。DisplayMemberBinding="{Binding Description}" を DisplayMemberBinding="{Binding description}" に変更すると、うまくいきました。

于 2013-10-24T11:26:35.977 に答える