2017-02-11 25 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標記中定義的列。