Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将列表框绑定到静态列表并创建DataTemplate_C#_Wpf_Templates_Data Binding - Fatal编程技术网

C# 将列表框绑定到静态列表并创建DataTemplate

C# 将列表框绑定到静态列表并创建DataTemplate,c#,wpf,templates,data-binding,C#,Wpf,Templates,Data Binding,我创建了以下具有静态成员列表的类: public class Role { public static List<Role> AllRoles = new List<Role>() { Administrators, PowerUsers, Limited }; public static Role Administrators = new Role() { Name = "Bob" };

我创建了以下具有静态成员列表的类:

public class Role
{
    public static List<Role> AllRoles = new List<Role>()
    {
        Administrators,
        PowerUsers,
        Limited
    };

    public static Role Administrators = new Role() { Name = "Bob" };
    public static Role PowerUsers = new Role() { Name = "Jimbo" };
    public static Role Limited = new Role() { Name = "Jack" };

    public string Name { get; set; }
}
公共类角色
{
公共静态列表AllRoles=新列表()
{
管理员,
超级用户,
有限的
};
public static Role Administrators=new Role(){Name=“Bob”};
公共静态角色PowerUsers=newrole(){Name=“Jimbo”};
public static Role Limited=new Role(){Name=“Jack”};
公共字符串名称{get;set;}
}
现在,我正试图在一个列表框中绑定它,该列表框中有一个基于每个项目属性的项目模板。我无法使绑定工作,它不会返回值

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WPFTests">

    <Grid>
        <ListBox Width="200" Height="200"
                 ItemsSource="{Binding Source={x:Static local:Role.AllRoles}}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <CheckBox Content="{Binding Path=Name}" />
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>


我一定错过了一些简单的东西。我得到了3个复选框来表示一个由3个成员组成的数组,但是我没有得到任何绑定到公共属性的结果。

如果您像这样重新排列代码,它会工作:

public class Role 
{ 
    public static List<Role> AllRoles = new List<Role>() 
    { 
        Administrators, 
        PowerUsers, 
        Limited 
    }; 

    public static Role Administrators = new Role() { Name = "Bob" }; 
    public static Role PowerUsers = new Role() { Name = "Jimbo" }; 
    public static Role Limited = new Role() { Name = "Jack" }; 

    public string Name { get; set; } 
} 
公共类角色
{ 
公共静态列表AllRoles=新列表()
{ 
管理员,
超级用户,
有限的
}; 
public static Role Administrators=new Role(){Name=“Bob”};
公共静态角色PowerUsers=newrole(){Name=“Jimbo”};
public static Role Limited=new Role(){Name=“Jack”};
公共字符串名称{get;set;}
} 
您不应该依赖于静态字段初始化的特定顺序。根据,静态字段初始化的顺序未定义

使用静态构造函数可能会使代码更具可读性:

public class Role
{
    public static Role Administrators;
    public static Role PowerUsers;
    public static Role Limited;

    public static List<Role> AllRoles;

    static Role()
    {
        Administrators = new Role() {Name = "Bob"};
        PowerUsers = new Role() {Name = "Jimbo"};
        Limited = new Role() {Name = "Jack"};

        AllRoles = new List<Role>()
            {
                Administrators,
                PowerUsers,
                Limited
            };
    }

    public string Name { get; set; }
}
公共类角色
{
公共静态角色管理员;
公共静态角色超级用户;
公共静态角色有限;
公共静态列表所有角色;
静态角色()
{
Administrators=新角色(){Name=“Bob”};
PowerUsers=newrole(){Name=“Jimbo”};
Limited=新角色(){Name=“Jack”};
AllRoles=新列表()
{
管理员,
超级用户,
有限的
};
}
公共字符串名称{get;set;}
}

在这里,我认为这是关于WPF绑定的一些我不知道的事情。我从未遇到过静态初始值设定项顺序的问题。很高兴知道。它不是未定义的,它们按照声明顺序执行。类的静态字段变量初始值设定项对应于按文本顺序执行的赋值序列,这些赋值在类声明中显示。@Sandeep Singh Rawat:根据上面的链接,初始化顺序未定义。此外,ECMA C#标准表示,它是未定义的(请参阅)。