WPF绑定问题

时间:2011-03-31 16:21:27

标签: wpf data-binding datacontext

例如,我有:

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”)

2 个答案:

答案 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"/>