none
请问如果把两个list绑定到一个datagrid中 RRS feed

  • 问题

  • <Window x:Class="DataContext切换测试.多个LIST绑定"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:DataContext切换测试"
            mc:Ignorable="d"
            Title="多个LIST绑定" Height="300" Width="300">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <DataGrid Grid.Row="1" Name="dgMain">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding main1.id}" Header="id" />
                    <DataGridTextColumn Binding="{Binding main1.value}" Header="value" />
                    <DataGridTextColumn Binding="{Binding main2.name}" Header="name"/>
                    <DataGridTextColumn Binding="{Binding main2.age}" Header="age"/>
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
    </Window>

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Shapes;
    
    namespace DataContext切换测试
    {
        /// <summary>
        /// 多个LIST绑定.xaml 的交互逻辑
        /// </summary>
        public partial class 多个LIST绑定 : Window
        {
            List<t1> lt1 = new List<t1>()
            {
                new t1() { id = "1", value = "v1" },
                new t1() { id = "2", value = "v2" },
    
            };
            List<t2> lt2 = new List<t2>(){
                new t2() { id = "1", name = "t21",age="a1" },
                new t2() { id = "2", name = "t22",age="a2" },
                new t2() { id = "3", name = "t23",age="a3" },
                new t2() { id = "4", name = "t24",age="a4" },
            };
    
            public 多个LIST绑定()
            {
                InitializeComponent();
                //这样拼装没有结果
                dgMain.DataContext = new
                {
                    main1 = lt1,
                    main2 = lt2,
                };
    
                //这样拼装是不行的
                //dgMain.ItemsSource = new
                //{
                //    main1 = lt1,
                //    main2 = lt2,
                //};
            }
    
            public class t1
            {
                public string id { get; set; }
                public string value { get; set; }
            }
           public  class t2
            {
                public string id { get; set; }
                public string name { get; set; }
                public string age { get; set; }
            }
        }
    }
    

    2016年11月25日 2:23

全部回复

  • 我想要的效果是

    id value,name,age

    1    v1    t21 a1

    2    v2    t22     a2

    相当于我只要第一个list的所有行。但是name和age要取list2的值,因为list2是一个全局变量,当网络上的消息推过来时,

    t21,a1 和t22,a2会及时更新



    • 已编辑 彭123 2016年11月25日 2:26
    2016年11月25日 2:25

  • Hi 彭123,

    >>把两个list绑定到一个datagrid中

    据我所知, WPF 不支持绑定多个集合。 你需要将2个集合合并成一个集合,在绑定到DataGrid中。可以通过linq 等。

    >> 网络上的消息推过来时,t21,a1 和t22,a2会及时更新

    你需要对Mode实现 INotifyPropertyChanged 接口,实现OnPropertyChanged事件。

    Best Regards,

    Yohann Lu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2016年11月25日 10:15
    版主
  • 只能在t2中多加一个value的变量,然后对其赋值,不想在原来的类上修改就新建一个类
    2016年11月29日 1:47