2013-01-22 60 views
0

我構建數據網格在我的WPF應用程序。 Datagrid的ItemSource綁定到IEnumerable集合。我不知道我的項目的ViewModel。當我將datagrid項目源綁定到datagrid時,我可以即時獲得列標題和Row值。動態列標題和標題數量DataGrid中的WPF

我唐諾頭。它可能是任何東西。我需要在網格中的數據網格中顯示選定行的詳細信息。

要做到這一點,我需要到Bing SelectedItem.HeaderName到網格的文本塊。 但是,這裏的問題是我不知道標題的名稱。所以我不能簡單地硬編碼SelectedItem.Headername

和列數可以分別不同。所以我的詳細視圖也應該動態數字標題名稱與其相應的值時,我的數據網格行被選中。

截至目前我已經harcoded和看到的結果在我的XAML像下面。因爲對於一個特定的文件,我知道他們各自的列標題,

<Label HorizontalAlignment="Stretch" 
     VerticalAlignment="Center" 
     Grid.Row="0" 
     Grid.Column="0">Header2: 
</Label> 

<TextBlock Grid.Row="0" 
      Grid.Column="1" 
      Name="Header2" 
      Text="{Binding SelectedItem.date, ElementName=dataGrid1}" 
      Width="auto" 
      Height="auto" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Center" /> 

<Label Grid.Row="0" 
     Grid.Column="2" 
     VerticalAlignment="Center">Header3:</Label> 

<TextBlock Grid.Row="0" 
      Grid.Column="3" 
      Name="username" 
      Text="{Binding SelectedItem.Header3, ElementName=dataGrid1}" 
      Width="auto" 
      Height="auto" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Center" /> 

<Label Grid.Row="0" 
     Grid.Column="4" 
     VerticalAlignment="Center">Header4:</Label> 

<TextBlock Grid.Row="0" 
      Grid.Column="5" 
      Name="level" 
      Text="{Binding SelectedItem.header4, ElementName=dataGrid1}" 
      Width="auto" 
      Height="auto" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Center" /> 

<Label Grid.Row="1" 
     Grid.Column="0" 
     VerticalAlignment="Center">Header5:</Label> 

<TextBlock Grid.Row="1" 
      Grid.Column="1" 
      Name="logger" 
      Text="{Binding SelectedItem.header5, ElementName=dataGrid1}" 
      Width="auto" 
      Height="auto" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Center" /> 

<Label Grid.Row="1" 
     Grid.Column="2" 
     VerticalAlignment="Center">Headr6:</Label> 

<TextBlock Grid.Row="1" 
      Grid.Column="3" 
      Name="thread" 
      Text="{Binding SelectedItem.header6, ElementName=dataGrid1}" 
      Width="auto" 
      Height="auto" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Center" /> 

因爲我是一個begginer我無法弄清楚如何做到這一點。如果你想幫助我,我會很高興。並建議我需要閱讀的一些概念與這個動態列的生成相關,Count,將動態列標題分配給UI中的其他控件。 在此先感謝!

+0

如果我明白你的好,即使是顯示DataGrid信息的網格內容也應該是動態的,對嗎?在這種情況下,更好的方法是通過代碼隱藏。 – HichemSeeSharp

+0

@HichemC:是正確的.. :) – BinaryMee

回答

0

我做了一個小的項目包含動態生成取決於DataGrid的標題和DataGrid中提出您的收藏對象屬性的網格(TextBlock的文本框+ clollection)的。希望這就是你要找的。你可以從my SkyDrive

XAML donwload它:

<Grid> 
     <StackPanel> 
     <StackPanel x:Name="myStackPanel" Orientation="Vertical"></StackPanel> 
      <DataGrid x:Name="myDataGrid" ItemsSource="{Binding MySource}" AutoGenerateColumns="True"> 
     </DataGrid> 

     </StackPanel> 
    </Grid> 

我在Loaded事件處理程序中設置這樣的:

for (int i = 0; i < myDataGrid.Columns.Count; i++) 
        { 
         var childStackPanel = new StackPanel { Orientation = Orientation.Horizontal }; 

         var myTextBlock = new TextBlock { Text = myDataGrid.Columns[i].Header + " : " }; 

         var myTextBox = new TextBox { Width = 200 }; 

         Type myType = typeof(Text); 
         IList<PropertyInfo> props = new List<PropertyInfo>(myType.GetProperties()); 
         myTextBox.SetBinding(TextBox.TextProperty, 
               new Binding("SelectedItem." + props[i].Name) { ElementName = "myDataGrid" }); 
         childStackPanel.Children.Add(myTextBlock); 
         childStackPanel.Children.Add(myTextBox); 
         myStackPanel.Children.Add(childStackPanel); 
        } 

文本類:

public class TranslationText 
    { 
     private string _translation; 
     private bool _isTranslated; 

     public string Translation 
     { 
      get { return _translation; } 
      set 
      { 
       _translation = value; 
      } 
     } 

     public bool IsTranslated 
     { 
      get { return _isTranslated; } 
      set 
      { 
       _isTranslated = value; 
      } 
     } 

    } 
+0

感謝u..U解決了我的問題.. :)還有一個疑問.. MessageBox.Show(dataGrid1.Columns [I] .Header.ToString()+(新綁定(」 SelectedItem。「+ dataGrid1.Columns [i] .Header.ToString()){ElementName =」dataGrid1「}));這就是我正在消息框中顯示標題和它的選定值。我得到正確的選擇標題。但我沒有得到相應的價值。你能幫助嗎? – BinaryMee

+0

如果我的回答您的解決問題的基礎,那麼你應該將其標記爲answer.Your第二個問題是有點混亂。你需要表現出「其對應的選定單元格頭」? – HichemSeeSharp