当前位置:  开发笔记 > 编程语言 > 正文

LINQ to Objects - 绑定到ListView

如何解决《LINQtoObjects-绑定到ListView》经验,为你挑选了1个好方法。

我一直遇到使用LINQ将ListView绑定到Object的问题.最好用我创建的测试用例解释:

C#:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using System.Windows.Controls;

namespace WpfApplication1
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        public class MySubClass {
            public string subtitle;
        }

        public class MyClass
        {
            public string title;
            public MySubClass subclass;
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            MySubClass sub = new MySubClass();
            sub.subtitle = "This is the subtitle";

            MyClass cls = new MyClass();
            cls.title = "This is the title";
            cls.subclass = sub;

            ObservableCollection mylist = new ObservableCollection();
            mylist.Add(cls);
            mylist.Add(cls);

            listView1.ItemsSource = (from c in mylist select new List {c}).ToList();

            label1.Content = listView1.Items.Count.ToString();
        }
    }
}

XAML:


    
        
            
            
        
        
            
                
                    
                    
                
            
        
        
    

运行时,我希望此代码在listview中显示标题和副标题属性.它没有,但listview Count()正确显示它有2个项目.我想我绑定了错误的属性....我应该在绑定中使用不同的语法吗?

谢谢,伊恩



1> Marc Gravell..:

(更新)

重新xaml,看起来你错过了一行中的"Path =":

{Binding subclass.subtitle}

重新对象; 它可能需要属性; 尝试:

    public class MySubClass {
        public string subtitle {get;set;}
    }
    public class MyClass
    {
        public string title {get;set;}
        public MySubClass subclass {get;set;}
    }

这条线:

(from c in mylist select new List {c}).ToList();

创建一个列表列表,每个列表都有一个元素(外部列表中有两个项目).只需设置mylist为源:

listView1.ItemsSource = mylist;

如果你想在LINQ查询中做一个"有趣的"投影,那么它看起来更像是:

(from c in mylist select new { Foo = c.SomeProp,
    Bar = c.SomeOtherProp + 12 }).ToList();

这是一个单独的列表,只是与原始列表中的不同项目.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有