例如,我有:
MainWindows.cs
public partial class MainWindow : Window
{
public List<Player> List;
public MainWindow()
{
InitializeComponent();
List = new List<Player>()
{
new Player() {Id = 1, Name = "Tom"},
new Player() {Id = 2, Name = "Bob"},
new Player() {Id = 3, Name = "Any"},
};
comboBox1.DataContext = List;
}
public class Player
{
public string Name { get; set; }
public int Id { get; set; }
}
}
XAML:<ComboBox ItemsSource="{Binding}" DisplayMemberPath="Name"/>
如何(需要)将List设置为XAML的DataContext? (并从代码隐藏中删除“comboBox1.DataContext = List”)
答案 0 :(得分:2)
快速修复是直接在代码隐藏(而不是DataContext)中设置ComboBox的ItemsSource,但为了能够使用正确的绑定,您需要一个ViewModel或至少一个XAML DataContext。
此外,您应该为列表选择一个比列表更多的唯一名称,例如玩家 - 最好使用列表中对象类型的复数形式。
答案 1 :(得分:2)
除非您使用MVVM,否则不需要这样做,但无论如何,使用可以创建List作为窗口的属性,如此
public List<Player> List {get;set;}
然后在XAML中你可以使用RelativeSource绑定到窗口:
<ComboBox ItemsSource="{Binding Path=List, RelativeSource={RelativeSource AncestorType=Window, Mode=FindAncestor}}" DisplayMemberPath="Name"/>
或者,你可以为你的窗口命名:
<Window .... x:Name="MyWindow" ..>
然后在绑定中使用ElementName,如下所示:
<ComboBox ItemsSource="{Binding Path=List, ElementName=MyWindow}" DisplayMemberPath="Name"/>