[英]Binding a ListBox to a static list and creating a DataTemplate
我使用靜態成員列表創建了以下類:
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; }
}
現在我正在嘗試使用基於每個屬性的項目模板在ListBox中綁定它。 我無法使綁定工作,它不返回值。
<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; }
}
您不應該依賴於初始化靜態字段的特定順序。 根據http://msdn.microsoft.com/en-us/library/aa645758(v=vs.71).aspx ,靜態字段初始化的順序是未定義的。
使用靜態構造函數,代碼可能更具可讀性:
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; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.