2017-02-11 24 views
0

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

我的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的datacontext甚至不称为 我知道我的主视图正确连接到它自己的datacontext,因为它适用于数据网格之外的项目。

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

编辑: 我发现#2这些数据,添加它,但它不会改变任何东西:

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

    </Grid.Resources> 

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

回答

0

您必须DataGridItemsSource属性设置为IEnumerable为任何行渲染。

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

给在XAML标记的DataGridx:Name

<DataGrid x:Name="dg" HeadersVisibility="None" AutoGenerateColumns ...> 

然后在设定其ItemsSource属性隐藏代码:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     dg.ItemsSource = Enumerable.Range(0, 1); //returns an IEnumerable<int> with a single int -> one row will be rendered 
    } 
} 

这应该让你的单行与两个您在XAML标记中定义的列。