我有一个列表框,我将数据上下文绑定到一个对象。该对象具有许多属性,其中一些属性具有特定属性。
我想要做的是将项目源设置为对象的属性,但仅显示具有特定属性集的属性。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:2)
您可以使用LINQ和反射来获取具有该属性集的属性的值:
Class1 class1 = new Class1 { Name = "Sam", DOB = DateTime.Now, SSN = "123" };
MyListBox.ItemsSource = from p in typeof(Class1).GetProperties()
where p.IsDefined(typeof(Att), false)
select p.GetValue(class1, null);
在我的测试中,Name和DOB被标记为[Att],它们的值被添加到ListBox中。 SSN不是。
答案 1 :(得分:0)
一种方法是构建数据上下文object dynamically并将Visibility属性绑定到此动态构建的对象上的属性。然后,您将以下列方式使用它:
var provider = new MyDynamicProvider();
// Add the names of the properties with the particular attribute with
// initial values (found using reflection elsewhere).
provider.MyValues.Add("PropertyWithAttribute", "Test");
provider.MyValues.Add("PropertyWithAttributeVisibility", Visibility.Visible);
// Add properties that do not have the attribute
provider.MyValues.Add("PropertyWithoutAttributeVisibility", Visibility.Collapsed);
view.DataContext = provider.CreateDynamicWrapper();
在视图中,您现在可以执行以下操作:
<TextBlock
Visibility="{Binding PropertyWithAttributeVisibility}"
Text="{Binding PropertyWithAttribute}"
/>