2011-03-31 51 views
1

例如,我有:WPF结合问题

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

我怎样才能(需要)设置列表从XAML一个DataContext? (并从代码隐藏中删除“comboBox1.DataContext = List”)

回答

2

,除非你使用MVVM你不需要做到这一点,但在任何情况下,使用可以创建列表,像这样

public List<Player> List {get;set;} 

窗口的属性,然后在XAML ü可以使用的RelativeSource绑定到窗口:

<ComboBox ItemsSource="{Binding Path=List, RelativeSource={RelativeSource AncestorType=Window, Mode=FindAncestor}}" DisplayMemberPath="Name"/> 

另外,u能提供一个名称的窗口:

<Window .... x:Name="MyWindow" ..> 

,然后使用的ElementName在绑定,就像这样:

<ComboBox ItemsSource="{Binding Path=List, ElementName=MyWindow}" DisplayMemberPath="Name"/> 
2

快速修复是直接在代码隐藏(而不是DataContext)中设置ComboBox的ItemsSource,但为了能够使用正确的绑定,我需要一个ViewModel或至少一个XAML DataContext。

此外,您应该选择比列表更多的唯一名称,例如玩家 - 在列表中使用复杂形式的对象是一种很好的做法。

+0

我学习MVVM现在,感谢意见@dain – johnny 2011-03-31 17:10:51