2012-03-14 65 views
0

我有下面的类(简称为简单起见):如何为列表列表(在运行时)设置DisplayMemberPath?

namespace Test 
{ 
    class Class1 
    { 
     Class2 Property2 { get; set; } 
     Class3 Property3 { get; set; } 
    } 

    class Class2 
    { 
     string ColumnName { get; set; } 
    } 

    class Class3 
    { 
     string ColumnName { get; set; } 
     bool IsRequired { get; set; } 
    } 
} 

我实例的Class1列表,并填充它,然后设置一个ListView的数据绑定到我的列表如下。

List<Class1> pList = ...; 
listView1.ItemsSource = pList; 

我试图设置listView1.DisplayMemberPath等于"ColumnName""Class2.ColumnName""Class3.ColumnName""Test.Class2.ColumnName",但似乎没有任何工作(在ListView显示空白的项目。如果我设置DisplayMemberPathClass2Class3,该列表ListView显示器,但我想保持的Class1列表作为我的 数据源。

有什么简单的,我在这里失踪(我假设这是非常有可能)?(我已经搜查远广泛用于解决我的问题(wh ICH是希望非常简单),但我还没有得到什么工作还没有。)

+1

你试过用'Property2.ColumnName'和' Property3.ColumnName'? – Steve 2012-03-14 22:33:05

+0

@Steve:就是这样!这当然可以解释为什么“财产未找到”的错误不断出现,所以应该让我自己放弃。如果你让这个答案,我肯定会接受。 – 2012-03-15 03:37:17

回答

2

内部类的名字是Property2和Property3,
所以我认为,listView1.DisplayMemberPath正确的使用方法是:

listView1.DisplayMemberPath = "Property2.ColumnName"; 
2

的DisplayMemberPath仅仅是一个捷径。 您始终可以使用更灵活的方式提供DataTemplate。

<DataTemplate x:Key="myTemplate"> 
    <TextBlock Text="{Binding Property2.ColumnName}"/> 
</DataTemplate> 

<ItemsControl ItemTemplate="{StaticResource myTemplate}"/> 
+0

感谢您的回答。沿着学习WPF背后的所有XAML的路线是我暂时想要避免的,并且可能会避免这个问题的需要,但是我想如果我继续这样做,最终我会最终走向这条路。 – 2012-03-15 03:40:11

+0

+1:两周后,这是我最终使用的方法。再次感谢您的回答。 – 2012-03-28 16:38:45