C# 数据绑定到两个源

C# 数据绑定到两个源,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我需要使用两个列表框,每个列表框绑定到不同的集合 在需要绑定两个列表框之前,我最初使用一个列表框并进行绑定。 下面是我是如何做到这一点的 <Window x:Class="TeamManager.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xml

我需要使用两个列表框,每个列表框绑定到不同的集合

在需要绑定两个列表框之前,我最初使用一个列表框并进行绑定。 下面是我是如何做到这一点的

 <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; }

}
公共类AppModel
{
公共ObservableCollection游戏集合{get;set;}
公共ObservableCollection 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 { }

    }
GameDBEntities\u entity=new GameDBEntities();
AppModel \u模型;
公共主窗口()
{
初始化组件();
DataContext=模型;
}
AppModel模型
{
收到
{
如果(_model==null)
{
_model=新的AppModel();
}
如果(_model.gameCollection==null)
{
_model.gameCollection=新的ObservableCollection(_entity.Games);
}
如果(_model.playerCollection==null)
{
_model.playerCollection=新的ObservableCollection(_entity.Players);
}
回归模型;
}
集合{}
}
在我的Xaml中,如何将现有列表框的datacontext设置为绑定到AppModel中的游戏集合? 一旦我开始工作,我将自己处理第二个列表框。
谢谢

将绑定更改为
会解决您的问题吗

根据您的问题,您声明您曾经将DataContext设置为gameCollection,但是现在您已经将其更改为使用AppModel,您还需要根据需要更改绑定

这将从本质上改变绑定到gameCollection的方式,现在将设置为使用AppData.gameCollection。

您需要向
绑定添加一个。
DatacContext
将是模型,路径应指向以下任一集合:

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