2011-09-27 26 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。