当ItemSource是Observable集合时隐藏DataGrid中的列

我有DataGrid其中ItemSource是使用MVVM原型的Observable集合绑定。我想不显示我的DataGrid中显示的类的ID属性,但我仍然需要该属性存在。当ItemSource是Observable集合时隐藏DataGrid中的列

我的代码:

XAML

<DataGrid ItemsSource="{Binding MyData}" IsReadOnly="True" Name="dtSearch" /> 

视图模型

private ObservableCollection<MyDataClass> myData; 

public ObservableCollection<MyDataClass> MyData

{

get { return myData; }

set

{

myData= value;

RaisePropertyChanged("MyData");

}

}

可观察类

public partial class MyDataClass 

{

public int ID { get; set; }

public string Code { get; set; }

public string Name { get; set; }

public string Type { get; set; }

}

是否有在致敬我可以给我的身份证物业来掩盖它从DataGrid

我是否需要为可见属性创建另一个类?

一些指导将是伟大的!

回答:

无论数据是否存在于ObservableCollection中,都会发生此问题。

要解决此问题,必须将网格设置为不自动生成列。这是通过设置AutoGenerateColumns=False然后在xaml中指定所需的列来完成的。

<DataGrid ItemsSource="{Binding MyData}" AutoGenerateColumns="False" > 

<DataGrid.Columns>

<DataGridTextColumn Header="The Code"

Binding="{Binding Code}"/>

<DataGridTextColumn Header="The Name"

Binding="{Binding Name}"/>

<DataGridTextColumn Header="The Type"

Binding="{Binding Type}"/>

</DataGrid.Columns>

</DataGrid>

查看DataGrid文档中的更多列选项。

回答:

XAML:

<DataGrid x:Name="dataGrid1" Margin="0" AutoGenerateColumns="False"> 

<DataGrid.Columns>

<DataGridTextColumn Binding="{Binding Name}" Header="Name"/>

<DataGridTextColumn Binding="{Binding Code}" Header="Code"/>

<DataGridTextColumn Binding="{Binding Type}" Header="Type"/>

</DataGrid.Columns>

</DataGrid>

代码后面:

private void Window_Loaded(object sender, RoutedEventArgs e) 

{

ObservableCollection<MyDataClass> data = new ObservableCollection<MyDataClass>();

data.Add(new MyDataClass { Code = "Code 1", ID = 1, Name = "Name 1", Type = "Type 1" });

data.Add(new MyDataClass { Code = "Code 2", ID = 2, Name = "Name 2", Type = "Type 2" });

data.Add(new MyDataClass { Code = "Code 3", ID = 3, Name = "Name 3", Type = "Type 3" });

data.Add(new MyDataClass { Code = "Code 4", ID = 4, Name = "Name 4", Type = "Type 4" });

data.Add(new MyDataClass { Code = "Code 5", ID = 5, Name = "Name 5", Type = "Type 5" });

dataGrid1.ItemsSource = data;

}

结果:

回答:

WPF数据绑定引擎绑定到对象的所有公共性质。所以,最简单的是让你的ID属性内部(如果这不会破坏任何其他代码)。
但是,绑定到对象列表时有一种更一般的方法。首先,把下面的一些共同的地方:

public class BindableCollection<T> : ObservableCollection<T>, ITypedList 

{

string ITypedList.GetListName(PropertyDescriptor[] listAccessors) { return null; }

PropertyDescriptorCollection ITypedList.GetItemProperties(PropertyDescriptor[] listAccessors)

{

return TypeDescriptor.GetProperties(typeof(T), PropertyFilter);

}

static readonly Attribute[] PropertyFilter = { BrowsableAttribute.Yes };

}

,并使用类,而不是ObservableCollection<T>。然后只需使用Browsable属性来隐藏物品类的成员。为了您的例子是这样的:

视图模型

private BindableCollection<MyDataClass> myData; 

public BindableCollection<MyDataClass> MyData

{

get { return myData; }

set

{

myData= value;

RaisePropertyChanged("MyData");

}

}

可观察类

public partial class MyDataClass 

{

[Browsable(false)]

public int ID { get; set; }

public string Code { get; set; }

public string Name { get; set; }

public string Type { get; set; }

}

以上是 当ItemSource是Observable集合时隐藏DataGrid中的列 的全部内容, 来源链接: utcz.com/qa/261790.html

回到顶部