WPF绑定到具有特定属性的对象的属性

时间:2010-01-21 14:40:18

标签: wpf reflection binding

我有一个列表框,我将数据上下文绑定到一个对象。该对象具有许多属性,其中一些属性具有特定属性。

我想要做的是将项目源设置为对象的属性,但仅显示具有特定属性集的属性。

任何人都可以帮我解决这个问题吗?

2 个答案:

答案 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}" 
    />