2014-10-13 4 views
0

내가 가진 XAML 코드ListView에서 GridViewColumn 바인딩 경로 이름 가져 오기?

<ListView Name="List1" Margin="0,33,0,0" 

       ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
       ScrollViewer.VerticalScrollBarVisibility="Visible" 
    ItemsSource="{Binding Path=Table}" MouseDoubleClick="List1_MouseDoubleClick"> 

     <ListView.View> 

     <GridView x:Name="_gridView" ColumnHeaderTemplate="{StaticResource BlueHeader}"> 
      <GridViewColumn x:Name="LoyaltyCode" Header="Code" DisplayMemberBinding="{Binding Path=LoyaltyCode}"/> 
      <GridViewColumn x:Name="LoyaltyName" Header="Name" Width="130" DisplayMemberBinding="{Binding Path=LoyaltyName}" HeaderTemplate="{StaticResource BlueHeaderName}"/> 
      <GridViewColumn Header="PurProductPonits" DisplayMemberBinding="{Binding Path=PurProductPonits}"/> 
      <GridViewColumn Header="PurProductAmount" DisplayMemberBinding="{Binding Path=PurProductAmount}"/> 
      <GridViewColumn x:Name="PurServicePonits" Header="PurServicePonits" DisplayMemberBinding="{Binding Path=PurServicePonits}"/> 
      <GridViewColumn Header="PurServiceAmount" DisplayMemberBinding="{Binding Path=PurServiceAmount}"/> 
      <GridViewColumn Header="RedeemPoints" DisplayMemberBinding="{Binding Path=RedeemPoints}"/> 
      <GridViewColumn Header="RedeemAmount " DisplayMemberBinding="{Binding Path=RedeemAmount}" /> 

      <GridViewColumn Header="LoyaltyID" DisplayMemberBinding="{Binding Path=LoyaltyID}" Width="0"/> 

      <GridView.ColumnHeaderContainerStyle> 
       <Style TargetType="{x:Type GridViewColumnHeader}"> 
        <Setter Property="IsEnabled" Value="False"/> 
        <Style.Triggers> 
         <Trigger Property="IsEnabled" Value="False"> 
          <Setter Property="TextElement.Foreground" Value="Black"/> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </GridView.ColumnHeaderContainerStyle> 
     </GridView> 
    </ListView.View> 

</ListView> 

그리고 코드 뒤에 나는 "DisplayMemberBinding 경로 이름으로 column.Header 및 값 항목와 콤보 상자의 표시 항목를 작성해야

foreach (GridViewColumn column in _gridView.Columns) 
{ 
    if (column.Width == 0) 
     continue; 

    //ComboBoxItem item = new ComboBoxItem(); 
    // item.Content=column.Header; 
    // item.Tag=column.???; 
    // cmbSearch.Items.Add(item); 

    cmbSearch.Items.Add(column.Header); 
} 

입니다 " 예 : item.Content = 코드, 항목. 태그 = LoyaltyCode

+0

확실하지 않은 것을 선택하십시오. 여기서 표시 항목은 열 머리글 (동일한 열에있는 모든 셀에 대해 동일)이지만 여기에서 원하는 값 항목은 무엇입니까? 당신은 모든 가치 *** 항목 *** 같은 열에 콤보 상자의 항목으로 추가되어야 함을 의미합니까? –

+0

응답에 대한 thnks ... 각 열의 정확한 db 필드 이름은 값으로 추가되어야합니다 - 콤보 상자의 항목. 머리글에 코드 표시, dbField 이름은 LoyaltyCode, 값 필드로 추가하려면 LoyaltyCode가 필요합니다 ... 또는 간단히 colomn과 바인드 된 dbField 이름을 어떻게 얻을 수 있습니까 ?? –

답변

1

이 답변은 1 년 늦었지 만 각 열의 DisplayMemberBinding 속성을 Binding 개체로 캐스팅하면 Path 속성에 액세스하여 거기에서 속성 이름을 가져올 수 있습니다. 따라서 다음과 같이하십시오 :

foreach (GridViewColumnHeader column in _gridView.Columns) 
    { 
     if (column.Width == 0) 
      continue; 
     ComboBoxItem item = new ComboBoxItem(); 
     item.Content=column.Header; 
     string property = ((System.Windows.Data.Binding)column.DisplayMemberBinding).Path.Path; 
     item.Tag= property; 
     cmbSearch.Items.Add(item); 

     cmbSearch.Items.Add(column.Header); 
    } 
+0

1 년 후 답변 해 주셔서 감사합니다. 나를 도와 주었다. displaymemberbinding이 null이거나 경로 중 하나 인 경우 null을 확인하려고 할 수 있습니다. – juFo

관련 문제