2011-05-13 55 views
0

所以,我有以下情形:WPF数据绑定列表框嵌套类

我有一个视图模型的一类部分内容如下:

public class ResourceModuleAccess 
{ 
    public class ModuleAccess 
    { 
     ResourceModule module; 
     Mode mode; 
    } 

    public List<DisplayAccess> Items 
    { 
     get 
     { 
      var result = from g in groups 
         join p in groupAccess on g.GroupID equals p.GroupId into outer 
         from p in outer.DefaultIfEmpty() 
         select new DisplayAccess { Name = g.Name, Module = (p == null) ? ResourceModule.None : p.Module }; 
      var output = result.ToList(); 
      return output; 
     } 

    } 

,我想数据绑定物品到列表框中显示的名称和模块

<ListBox ItemsSource="{Binding ModulesAccess.Items}">     
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <StackPanel Orientation="Horizontal"> 
           <Label Content="{Binding DisplayAccess.Name}"></Label> 
           <CheckBox></CheckBox> 
          </StackPanel> 
         </DataTemplate> 
        </ListBox.ItemTemplate>       
       </ListBox> 

列表框显示正确的项目,所以它发现的收集,但无法将属性映射到标签

我也试过

<DataTemplate DataType="{x:Type DisplayAccess}"> 
          <StackPanel Orientation="Horizontal"> 
           <Label Content="{Binding Name}"></Label> 
           <CheckBox></CheckBox> 
          </StackPanel> 
         </DataTemplate> 

但这并不建:它说,它无法找到公共型DisplayAccess。

+0

你在哪里定义了DisplayAccess类?如果可能,请将DisplayAccess类公开。 – publicgk 2011-05-13 08:59:44

回答

2

您的ModulesAccess.ItemsDisplayAccess的列表,因此您的列表框的项目模板的数据上下文将已经是单个DisplayAccess对象。

鉴于此,在第一个示例中,您应该只能绑定到Name而不是DisplayAccess.Name

你的第二个例子也可以工作,但你可能需要用命名空间来限定类型,例如,

<DataTemplate DataType="{x:Type yourns:DisplayAccess}"> 
    .... 
</DataTemplate> 

顺便说一句,你经常会发现绑定错误被写入在Visual Studio(调试/窗/输出菜单),它可以给你一个指针,以什么地方出了错输出窗口。

+0

BindingExpression path error:在'object''''DisplayAccess'(HashCode = 22943289)'找不到'Name'属性。 BindingExpression:路径=名称; DataItem ='DisplayAccess'(HashCode = 22943289);目标元素是'标签'(Name ='');目标属性是'内容'(类型'对象') – Marcom 2011-05-13 09:09:25

+0

哇,名称不是一个属性。感谢提示。 – Marcom 2011-05-13 09:11:23

+0

这是一个非常大的线索:“在DisplayAccess上找不到名称”。这意味着绑定正在查看正确的对象(“DisplayAccess”),但无法找到您的绑定属性。你可以发布DisplayAccess吗? – MarcE 2011-05-13 09:12:16

0

对于有类似问题的人:显示访问字段应该是属性。

public class DisplayAccess 
{ 
    private string name; 

    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 
    private ResourceModule module; 

    public ResourceModule Module 
    { 
     get { return module; } 
     set { module = value; } 
    } 
}