2013-01-21 48 views
1

我有一個的ItemSource和從其中i的數據網格結合值綁定列標題用的ItemSource

<DataGridTextColumn Header="Message" Binding="{Binding Path=message}"/> 
    <DataGridTextColumn Header=" Logger" Binding="{Binding Path=logger}"/> 
    <DataGridTextColumn Header="Level" Binding="{Binding Path=level}" /> 

我必須的標題文字與鍵的詞典結合以及

Dictionary<String, object>.KeyCollection keyslist = dict1.Keys; 

與這本詞典我必須綁定標題文本。

是否有可能有一個Datagrid兩個項目?

+0

我想你應該進一步解釋你想要的。 DataGrid的ItemsSource應該是什麼,頭部的Itemsource是什麼? – iltzortz

+0

Datagrid有一個IEnumerable集合(說結果)作爲Itemsource,當我直接綁定它說this.datagrid.Itemsource =結果它被自動綁定在提供的數據網格Autogenerate columns = True,但我需要格式化列標題和列Autogeneratecolumns = true不能滿足我的需要,現在我有一個字典「Keyslist」中的列標題列表......如何將keyslist綁定到列標題?或者我如何從「結果」中獲得列標題 – Raghu

+0

那麼,你的代碼是什麼?你需要的東西比標題=「水平」等? – iltzortz

回答

0

你的問題的簡短答案是:是的,它的可能性。雖然這是一個做事的混亂的方式,我不建議做這種方式(除非你真的要,因爲我不知道您的上下文信息),這裏的想法:

  1. 第一個問題是,標題綁定似乎被打破了一些。除了通過Source = {x:Static}定義替代數據上下文外,我無法通過常規方式將其綁定到它。

  2. 在Header綁定中綁定到集合是不可能的,因此您需要給它一個縮放值或者編寫一個轉換器,它接受一個參數並在字典中查找以返回實際值。

而這裏的示例代碼演示瞭如何我們這樣做是爲了測試結合(無轉換器):

XAML

<Window x:Name="window" x:Class="WpfDataGridMisc.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="214" DataContext="{Binding Source={x:Static wpfDataGridMisc:PersonsViewModel.Instance}}" 
     xmlns:wpfDataGridMisc="clr-namespace:WpfDataGridMisc"> 
    <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Persons}"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding FirstName}" Header="{Binding Source={x:Static wpfDataGridMisc:PersonsViewModel.Instance}, Path=Header1}" /> 
     </DataGrid.Columns> 
    </DataGrid> 
</Window> 

PersonsViewModel

using System; 
using System.Collections.ObjectModel; 

namespace WpfDataGridMisc 
{ 
    public class PersonsViewModel 
    { 
     private static readonly PersonsViewModel Current = new PersonsViewModel(); 

     public static PersonsViewModel Instance { get { return Current; } } 

     private PersonsViewModel() 
     { 
      Persons = new ObservableCollection<Person> 
       { 
        new Person {FirstName = "Thomas", LastName = "Newman", Date = DateTime.Now}, 
        new Person {FirstName = "Dave", LastName = "Smith", Date = DateTime.Now}, 
       }; 
      Header1 = "Header 1"; 
     } 

     public ObservableCollection<Person> Persons { get; private set; } 

     public string Header1 { get; set; } 
    } 
} 

Person類是一個標準poco,可從Person的代碼中獲得。

得分:感謝Johan Larsson的大部分代碼。他正在研究這個解決方案,我只是在幫忙,但他覺得我應該將答案作爲x發佈:Static是我的想法。