gpt4 book ai didi

c# - 为什么 Browsable(false) 不隐藏 DataGrid 中的列

转载 作者:行者123 更新时间:2023-12-04 18:03:21 27 4
gpt4 key购买 nike

在我的 WPF 应用程序中,我想通过向某些属性添加 [Browsable(false)] 来隐藏具有绑定(bind) ItemsSource 的 DataGrid 中的列但是,无论有无 Browsable(false),所有列都是可见的。

我的模型:

public class Room : INotifyPropertyChanged
{
private int id;
...
[Browsable(false)]
public int Id
{
get
{
return this.id;
}
set
{
this.id = value;
this.OnPropertyChanged("Id");
}
}
...
public Room()
{
}
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler propertyChangedEventHandler = this.PropertyChanged;
if (propertyChangedEventHandler != null)
{
propertyChangedEventHandler(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}

查看:

<DataGrid Grid.Row="1" ItemsSource="{Binding Rooms}" SelectedItem="{Binding SelectedRoom, Mode=TwoWay}" />

如何使用 Browsable(false) 隐藏列?

最佳答案

您可以通过连接 DataGrid 上的 AutoGeneratingColumn 事件来隐藏它们(参见 https://stackoverflow.com/a/3794324/4735446)。

public class DataGridHideBrowsableFalseBehavior : Behavior<DataGrid>
{
protected override void OnAttached()
{
AssociatedObject.AutoGeneratingColumn += AssociatedObject_AutoGeneratingColumn;
base.OnAttached();
}

private void AssociatedObject_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (((PropertyDescriptor)e.PropertyDescriptor).IsBrowsable == false)
e.Cancel = true;
}
}


<DataGrid
ItemsSource="{Binding Path=DataGridSource, Mode=OneWay}"
AutoGenerateColumns="true">
<i:Interaction.Behaviors>
<behaviors:DataGridHideBrowsableFalseBehavior>
</behaviors:DataGridHideBrowsableFalseBehavior>
</i:Interaction.Behaviors>
</DataGrid>

关于c# - 为什么 Browsable(false) 不隐藏 DataGrid 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31430659/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com