【问题标题】:AutoGenerateField not working in wpf datagridAutoGenerateField 在 wpf 数据网格中不起作用
【发布时间】:2019-12-24 00:22:17
【问题描述】:

我将我的数据网格绑定到类 CustomerDetails 的 observableCollection,我想隐藏其中一个属性以使其不作为列显示在 UI 上,为此我使用 AutoGenerateField 为 false,但此列仍然显示在 UI 中,我错过了什么?

我的 xaml 文件如下所示:

<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding DataGridItems}" 
                      Margin="1" IsReadOnly="True" SelectedIndex="{Binding SelectedItem }"

ViewModel.cs:

 public ObservableCollection<CustomerDetails> DataGridItems => _model.CustomerDetailsList;

模型.cs

 public ObservableCollection<CustomerDetails> CustomerDetailsList { get; set; }


public MyModel()
        {            
            CustomerDetailsList = new ObservableCollection<CustomerDetails>();    // assume that my list of customers is initialized here      
        }  


 public class CustomerDetails 
    {

        #region Constructor

        public CustomerDetails()
        {

        }

        #endregion

        #region Public Members        

        public string CustomerName
        {
           get; set;
        }

        public string CustomerID
        {
            get;set;
        }

        public string ProductCode
        {
            get;set;
        }
// want to hide this from getting shown in Datagrid
        [Display(AutoGenerateField = false)]
        public string ProductInternalId { get; set; }

【问题讨论】:

    标签: wpf data-binding datagridview


    【解决方案1】:

    您可能遇到与以下相同的潜在问题:

    您应该处理 AutoGeneratingColumn 事件以取消列的生成(您可以将您的逻辑基于字段属性以仍然使用 [Display(AutoGenerateField=false)]):

    或者,您可以关闭 AutoGenerateColumns 并手动将您想要的列添加到数据网格列模板中。

    【讨论】:

    • 感谢分享链接。我仍然很困惑, [Display(AutoGenerateField = false)] 有什么用,它应该什么时候起作用?我的假设是,如果我将 [Display(AutoGenerateField = false)] 用于我不想在 UI 上显示的属性,我不必处理 AutoGeneratingColum 事件来取消 Column 的生成
    • 据我所知,数据注释不适用于 WPF DataGrid:social.msdn.microsoft.com/Forums/vstudio/en-US/…
    【解决方案2】:

    WPF 中的 DataGrid 不会检查属性是否被 DisplayProperty 修饰,因此使用此属性修饰您的属性将无效。

    您应该做的是将AutoGenerateColumns 属性设置为false 并在XAML 标记中明确定义所需的列,或者处理AutoGeneratingColumn 事件:

    private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
        e.Cancel = e.PropertyName == "ProductInternalId ";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 2023-03-27
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 2015-07-31
      相关资源
      最近更新 更多