2011-03-31 50 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