簡體   English   中英

WPF C#上DataGridColumnHeader上的DataTemplate

[英]DataTemplate on DataGridColumnHeader WPF C#

我在將DataTemplate應用於具有動態生成的列的datagrid中的所有列時遇到麻煩。 ItemsSource綁定到VM中的DataTable屬性。 除模板之外的所有其他東西都可以正常工作。 目前,這只是概念的初步證明,因此數據是垃圾,但是在概念證明方面需要幫助。

代碼如下:

視圖:

<DataGrid AutGenerateColumns="true" ItemsSource={Binding xxx} etc...>
    <DataGrid.Columns>                
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.HeaderTemplate>
                    <DataTemplate>
                        <Button Content="ok"/>
                    </DataTemplate>
                </DataGridTemplateColumn.HeaderTemplate>
            </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

ViewModel-現在,在加載時,我正在創建一個表。 顯然最終將被DB調用取代...

[ImportingConstructor]
    public GenericQueueViewModel()
    {           
        int y = new Random().Next(20);
        TestList = createTableForDataGrid(y);
    }

    private DataTable createTableForDataGrid(int numberOfCols)
    {
        DataTable test = new DataTable();
        for (int i = 0; i < numberOfCols; i++)
        {
            DataColumn oDc = new DataColumn();                
            test.Columns.Add(oDc);
        }
        Random x = new Random();
        int y = x.Next(100);
        for (int i = 0; i <= y; i++)
        {
            DataRow oRow = test.NewRow();
            for (int j = 0; j < test.Columns.Count; j++)
            {
                oRow[j] = i.ToString() + " | " + j.ToString();
            }
            test.Rows.Add(oRow);
        }
        return test;
    }

private DataTable _testList;

    public DataTable TestList
    {
        get { return _testList; }
        set 
        { 
            _testList = value;
            OnPropertyChanged(() => TestList);
        }
    }

結果:

在此處輸入圖片說明

就像DataGrid是最初使用模板創建的,但是當OnPropertyChanged觸發時,不會調用模板。 網格可以很好地填充,但是標題中沒有按鈕。

我需要對StaticResource做些什么才能使其正常工作? 將樣式拉出網格? 我不太確定為什么它不起作用。

動態解決方案是強制性的。 這是針對將裝載“無論如何”的隊列的信息……可能有5列,也許有200列。因此,我無法單獨定義列。

您實際上是通過這種方式創建了一個額外的列。 要解決此問題,您需要創建一種樣式以自定義列標題模板並設置標題模板。 如下所示:

<Style TargetType="DataGridColumnHeader">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate>
        <Button Content="Ok"/>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

<DataGrid AutGenerateColumns="true" ItemsSource={Binding xxx} etc...>

</DataGrid>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM