所以我有以下情况:
我有一个视图模型的类部分如下:
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 :(得分:2)
您的ModulesAccess.Items
是DisplayAccess
的列表,因此您的列表框项目模板的数据上下文已经是单个DisplayAccess
对象。
鉴于此,您应该能够在第一个示例中绑定到Name
而不是DisplayAccess.Name
。
您的第二个示例也应该有效但您可能需要使用命名空间限定类型,例如
<DataTemplate DataType="{x:Type yourns:DisplayAccess}">
....
</DataTemplate>
顺便说一句,您经常会发现绑定错误被写入visual studio中的Output窗口(Debug / Windows / Output菜单),它可以指示您出错的地方。
答案 1 :(得分: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; }
}
}