将绑定数据传递给DataGrid中的用户控件

时间:2012-06-05 15:11:16

标签: wpf binding datagrid datacontext

我已经建立了一个绑定到ObservableCollection的数据网格。此网格中的一列由用户控件填充,该控件需要从父数据网格绑定的ObservableCollection获取数据。是否可以绑定子用户控件以使用来自ObervableCollection的数据?我正在使用的XAML是:

<Window x:Class="Hotspots_Control.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Hotspots_Control"
    Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
    <local:viewModel/>
</Window.DataContext>
<DataGrid ItemsSource="{Binding areaList}" Name="hotspotsGrid" AutoGenerateColumns="False" CanUserAddRows="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Area" Binding="{Binding Path=area}" IsReadOnly="True"/>
        <DataGridTemplateColumn Header="Alarms">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <local:AlarmView/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

网格绑定到“viewModel”对象内的“areaList”。我需要让AlarmView用户控件访问ObservableCollection中的每个对象。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

使用DataContext属性设置绑定对象:

<DataTemplate>
  <local:AlarmView DataContext="{Binding}"/>
</DataTemplate>

由于DataTemplate已绑定到areaList,因此可以使用直接绑定设置DataContext。从这里,子视图将可以访问areaList个对象。

答案 1 :(得分:0)

我会将列表传递给enitity vm的构造函数,然后您可以从那里访问它,因为您可以将它存储在私有成员中。

也许有另一个解决方案可能更适合,但为此我没有足够的细节来解决这个问题。