2011-09-27 21 views
1

我需要使用兩個列表框,每個綁定到不同的集合。DataBinding到兩個源

我原本有這個工作與一個列表框和綁定之前需要綁定兩個來了。 這是我如何做到這一點。

<Window x:Class="TeamManager.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:loc ="clr-namespace:TeamManager" 
    Title="Game Manager" Height="800" Width="800"> 

<Window.Resources> 
    <DataTemplate DataType="{x:Type loc:Game}"> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="auto"></RowDefinition> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 

       <ColumnDefinition Width="100"></ColumnDefinition> 
       <ColumnDefinition Width="100"></ColumnDefinition> 
       <ColumnDefinition Width="100"></ColumnDefinition> 
       <ColumnDefinition Width="100"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 
      <TextBlock Name="dateBlock" Grid.Column="0" Grid.Row="1" Text="{Binding Date, StringFormat=d}"></TextBlock> 
      <TextBlock Name="TimeBlock" Grid.Column="1" Grid.Row="1" Text="{Binding Time}"></TextBlock> 
      <Button Grid.Row="1" Grid.Column="2" CommandParameter="{Binding Id}" Click="Manage_Click" >Manage</Button> 
      <Button Grid.Row="1" Grid.Column="3" CommandParameter="{Binding Id}" Click="Delete_Click" Height="16" Width="16"> 
       <Image Source="/Images/DeleteRed.png"></Image> 

      </Button> 
     </Grid> 
    </DataTemplate> 
</Window.Resources> 
<StackPanel> 

    <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> 

     <StackPanel> 
      <TextBlock>Upcomming Games</TextBlock> 
      <ListBox ItemsSource="{Binding}" Name="GameList"></ListBox> 
     </StackPanel> 
     <StackPanel Orientation="Vertical" HorizontalAlignment="Left"> 
      <Button Height="30" Width="100" Margin="10,10,10,10" Click="AddGame_Click">Add New Game</Button> 
     </StackPanel> 
    </StackPanel> 
</StackPanel> 

而且我的代碼只需設置窗口的DataContext到的ObservableCollection

與需要使用兩個集合,我創建一個包裝類,像這樣

public class AppModel 
{ 


    public ObservableCollection<Game> gameCollection { get; set; } 
    public ObservableCollection<Player> playerCollection { get; set; } 

} 

而且我的CS現在將DataContext設置爲AppModel的對象

GameDBEntities _entity = new GameDBEntities(); 
    AppModel _model; 
    public MainWindow() 
    { 
      InitializeComponent(); 

      DataContext = model; 
    } 


    AppModel model 
    { 
     get 
     { 
      if (_model == null) 
      { 
       _model = new AppModel(); 
      } 
      if (_model.gameCollection == null) 
      { 
       _model.gameCollection = new ObservableCollection<Game>(_entity.Games); 
      } 
      if (_model.playerCollection == null) 
      { 
       _model.playerCollection = new ObservableCollection<Player>(_entity.Players); 
      } 
      return _model; 
     } 
     set { } 

    } 

在我的Xaml中,如何將現有列表框的datacontext設置爲綁定到AppModel中的遊戲集合? 一旦我開始工作,我將自己處理第二個列表框。 謝謝!

回答

0

您需要將Path添加到BindingDatacContext將是模型,路徑應該指向任一集合:

<ListBox ItemsSource="{Binding gameCollection}" ... 
0

會改變綁定到<ListBox ItemsSource="{Binding Path=gameCollection}" Name="GameList"></ListBox>解決你的問題?

根據您的問題,您聲明您曾經將DataContext設置爲gameCollection,但現在您已將此更改爲使用AppModel,您還需要根據需要更改綁定。

這將從根本上改變Binding綁定到gameCollection,它現在將被設置爲使用AppData.gameCollection。