2011-05-13 97 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; } 
    } 
}