-1
私はStudentViewModel
オブジェクトのリストを持っています。このリストをDataGridViewでバインドしています。列生成は、バインドされたモデルのプロパティに従って自動的に設定されます。 StudentViewModelでカスタム属性を持つC#LINQ selectプロパティ
public async Task LoadGridView()
{
Tuple<List<StudentViewModel>, int> result = await App.StudentService.SearchAsync(studentRequestModel);
dataGridView1.DataSource = null;
dataGridView1.DataSource = result.Item1;
}
、私は、カスタム属性IsViewable
とプロパティの一部が飾られています。
[AttributeUsage(AttributeTargets.Property)]
public class IsViewable: Attribute
{
public bool Value { get; set; }
}
用法:
[IsViewable(Value = true)]
public string Name { get; set; }
アイデアだけでUIコントロールにバインドする前に、私はリストをフィルタリングして、私のグリッドが移入されるように、匿名オブジェクトの新しいリストを作りたい、です選択したプロパティのみ。
注:私はグリッドに固有の別のビューモデルを作成する必要はありません。パフォーマンス上の問題が発生した場合、私はそれをリファクタリングします。
動的遺伝子への道はありませんプロパティーはコンパイル時に知る必要があるため、匿名型を評価します。ディクショナリを使って名前と値をマップしたり、「ExpandoObject」を設定したり、「dynamic」を使ってプロパティのような構文を得ることができます。そのどちらか、または新しい 'o'を作成し、その属性を持つプロパティを動的にコピーします。 –
この回答は役に立ちます:https://stackoverflow.com/a/4938442/1220550 –
私が正しく理解していれば、これらのプロパティを 'DataGridView'で表示させたくありません。これがあなたの望むものなら、カスタム 'IsViewable'の代わりに' [Browsable(false)] '属性を使って達成できませんか? –