当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