Rya*_*rle 5 c# wpf xaml observablecollection mvvm
我有一个DataGrid
在ItemSource
是利用可观察集合约束MVVM
原型。我不想显示在我的类中显示的ID属性,DataGrid
但是我仍然需要该属性存在。
我的代码:
XAML
<DataGrid ItemsSource="{Binding MyData}" IsReadOnly="True" Name="dtSearch" />
Run Code Online (Sandbox Code Playgroud)
查看模型
private ObservableCollection<MyDataClass> myData;
public ObservableCollection<MyDataClass> MyData
{
get { return myData; }
set
{
myData= value;
RaisePropertyChanged("MyData");
}
}
Run Code Online (Sandbox Code Playgroud)
可观察类
public partial class MyDataClass
{
public int ID { get; set; }
public string Code { get; set; }
public string Name { get; set; }
public string Type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
是否可以提供ID属性以将其隐藏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>
Run Code Online (Sandbox Code Playgroud)
在DataGrid文档中查看更多列选项。
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 };
}
Run Code Online (Sandbox Code Playgroud)
并使用该类代替ObservableCollection<T>
。然后,只需使用Browsable
属性即可隐藏item类的成员。对于您的示例,它是这样的:
查看模型
private BindableCollection<MyDataClass> myData;
public BindableCollection<MyDataClass> MyData
{
get { return myData; }
set
{
myData= value;
RaisePropertyChanged("MyData");
}
}
Run Code Online (Sandbox Code Playgroud)
可观察类
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; }
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4773 次 |
最近记录: |