使用静态列和用户控件设置数据网格

时间:2017-02-11 20:35:43

标签: c# wpf xaml datagrid user-controls

我有一个包含3列的数据网格。每列包含一个特定的用户控件(一个具有树视图,另外两个具有不同的列表视图)。

我的xaml代码

<DataGrid HeadersVisibility="None" AutoGenerateColumns="False" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <view:MethodsTreeView DataContext="{Binding MethodsTreeVM}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <view:VariablesListView DataContext="{Binding VariablesListVM}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

但是,它不起作用。 甚至不调用来自usercontrols的viewmodels的datacontexts 我知道我的主视图已正确连接到自己的datacontext,因为它适用于数据网格之外的项目。

我打开任何解决方案(包括不使用数据网格),但重要的是我有3列,并且我可以用鼠标调整宽度。

编辑: 我在Stackoverflow上找到了这个数据,添加了它,但它并没有改变任何东西:

<Grid.Resources>
        <FrameworkElement x:Key="ProxyElement"
                     DataContext="{Binding}"/>

    </Grid.Resources>

    <DataGrid HeadersVisibility="None" AutoGenerateColumns="False" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >

1 个答案:

答案 0 :(得分:0)

对于要呈现的任何行,您必须将ItemsSource的{​​{1}}属性设置为DataGrid

如果将其设置为IEnumerable,返回1个IEnumerable<T>类型的对象,则会得到一行,如果T返回两个对象,则会在DataGrid中获得2行等等。

在XAML标记中提供IEnumerable<T>DataGrid

x:Name

然后在代码隐藏中设置其<DataGrid x:Name="dg" HeadersVisibility="None" AutoGenerateColumns ...> 属性:

ItemsSource

这应该为您提供一行,其中包含您在XAML标记中定义的两列。