【问题标题】:Get GridViewColumn Binding Path name from ListView?从 ListView 获取 GridViewColumn 绑定路径名称?
【发布时间】:2014-12-08 00:19:14
【问题描述】:

我有 xaml 代码

<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>

而后面的代码是

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);
}

我需要用 column.Header 和 value item 用“DisplayMemberBinding 路径名称”填充组合框的 显示项 例如.. item.Content=代码, item.Tag=忠诚度代码

【问题讨论】:

  • 不确定你想要什么。这里的显示项是列标题(对于同一列中的所有单元格都相同),但是您想要的值项到底是什么?你的意思是同一列中的所有值 items 应该添加为组合框的项目?
  • 对响应的感谢。每列中的确切数据库字段名称应添加为组合框的值项。在标题中显示代码,bt dbField 名称是 LoyaltyCode,我需要将 LoyaltyCode 添加为值字段...或者简单地说,我怎样才能获得与列绑定的 dbField 名称??

标签: c# wpf xaml listview gridviewcolumn


【解决方案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);
    }

【讨论】:

  • 感谢一年后的回复。帮助过我。如果 displaymemberbinding 为 null 或任何路径,您可能需要检查 null。
猜你喜欢
  • 2016-09-23
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
相关资源
最近更新 更多