Silverlight 绑定到ObservableCollection中的类<;T>;

Silverlight 绑定到ObservableCollection中的类<;T>;,silverlight,data-binding,observablecollection,Silverlight,Data Binding,Observablecollection,我正在尝试将Silverlight数据网格绑定到ObservableCollection 具体地说,我有ObservableCollection,其中目标具有以下属性:层次结构和项 我只希望datagrid显示Hierarchy类的信息,但当用户选择一行时,我希望目标类的Hierarchy和item属性在代码中都可用 这可能吗 谢谢。是的,这是可能的。首先,在网格上设置为false,然后手动为要显示的一个或多个属性添加列。将您的ObservableCollection设置为您的DataGrid的

我正在尝试将Silverlight数据网格绑定到
ObservableCollection

具体地说,我有
ObservableCollection
,其中目标具有以下属性:层次结构和项

我只希望datagrid显示Hierarchy类的信息,但当用户选择一行时,我希望目标类的Hierarchy和item属性在代码中都可用

这可能吗


谢谢。

是的,这是可能的。首先,在网格上设置为false,然后手动为要显示的一个或多个属性添加列。将您的
ObservableCollection
设置为您的
DataGrid
ItemsSource


当用户选择一行时,所选的
目标
实例将通过
数据网格可用。SelectedItem
属性,允许您查看其所有属性。

为列中的层次结构属性指定路径,如下所示:

Binding="{Binding Hierarchy.Title}"
完整示例如下:

MainPage.xaml

MainPage.cs
使用System.Collections.ObjectModel;
使用System.Windows.Controls;
命名空间网格绑定
{
公共部分类主页面:UserControl
{
公共ObservableCollection目标{get;set;}
公共主页()
{
初始化组件();
this.Targets=新的ObservableCollection()
{
新目标(){Hierarchy=new Hierarchy(){Text=“Text 1”,Title=“Title 1”},Item=new Item(){Name=“Name 1”},
新目标(){Hierarchy=new Hierarchy(){Text=“Text 2”,Title=“Title 2”},Item=new Item(){Name=“Name 2”},
新目标(){Hierarchy=new Hierarchy(){Text=“Text 3”,Title=“Title 3”},Item=new Item(){Name=“Name 2”},
};
this.DataContext=this;
}
private void dataGrid1\u SelectionChanged(对象发送方,SelectionChangedEventArgs e)
{
DataGrid DataGrid=发送方作为DataGrid;
Target Target=dataGrid.SelectedItem作为目标;
Hierarchy=target.Hierarchy;
项目=目标。项目;
}
}
公共类目标
{
公共层次结构{get;set;}
公共项项{get;set;}
}
公共类层次结构
{
公共字符串标题{get;set;}
公共字符串文本{get;set;}
}
公共类项目
{
公共字符串名称{get;set;}
}
}
<UserControl x:Class="GridBinding.MainPage"
    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"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">

    <Grid x:Name="LayoutRoot" Background="White">
        <sdk:DataGrid ItemsSource="{Binding Targets}" AutoGenerateColumns="False" Name="dataGrid1" SelectionChanged="dataGrid1_SelectionChanged">
            <sdk:DataGrid.Columns>
                <sdk:DataGridTextColumn Header="Title" Binding="{Binding Hierarchy.Title}" Width="Auto" />
                <sdk:DataGridTextColumn Header="Text" Binding="{Binding Hierarchy.Text}" Width="Auto" />
            </sdk:DataGrid.Columns>
        </sdk:DataGrid>
    </Grid>
</UserControl>
using System.Collections.ObjectModel;
using System.Windows.Controls;

namespace GridBinding
{
    public partial class MainPage : UserControl
    {
        public ObservableCollection<Target> Targets { get; set; }

        public MainPage()
        {
            InitializeComponent();
            this.Targets = new ObservableCollection<Target>()
                            {
                                new Target(){ Hierarchy = new Hierarchy(){Text = "Text 1", Title = "Title 1"}, Item = new Item(){Name = "Name 1"}},
                                new Target(){ Hierarchy = new Hierarchy(){Text = "Text 2", Title = "Title 2"}, Item = new Item(){Name = "Name 2"}},
                                new Target(){ Hierarchy = new Hierarchy(){Text = "Text 3", Title = "Title 3"}, Item = new Item(){Name = "Name 2"}},
                            };
            this.DataContext = this;
        }

        private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            DataGrid dataGrid = sender as DataGrid;
            Target target = dataGrid.SelectedItem as Target;
            Hierarchy heirarchy = target.Hierarchy;
            Item item = target.Item;
        }
    }

    public class Target
    {
        public Hierarchy Hierarchy { get; set; }
        public Item Item { get; set; }
    }

    public class Hierarchy
    {
        public string Title { get; set; }
        public string Text { get; set; }
    }

    public class Item
    {
        public string Name { get; set; }
    }
}