C# 将类成员的多个实例数据绑定到特定标签

C# 将类成员的多个实例数据绑定到特定标签,c#,wpf,data-binding,C#,Wpf,Data Binding,我有一个类,它有另一个类的私有成员,而该类是另一个类的可观察集合。。这是我需要信息的类,它有我想要数据绑定的私有成员 private readonly NflGameCollection _games; .... class NflGameCollection : ObservableCollectionEx<NflGameStatus> {... class NflGameStatus : INotifyPropertyChanged { //***th

我有一个类,它有另一个类的私有成员,而该类是另一个类的可观察集合。。这是我需要信息的类,它有我想要数据绑定的私有成员

private readonly NflGameCollection _games;
....

class NflGameCollection : ObservableCollectionEx<NflGameStatus>
    {...

class NflGameStatus : INotifyPropertyChanged
    {
    //***these are the members i want databound***
    private readonly string _homeTri;
    private readonly string _awayTri;
    private string _homeScore;
    private string _awayScore;
我怎样才能得到这样的结果,如果hometri和awaytri都和我想要的一样。。。我可以得到该类的其他实例吗?比如说

if item.HomeTri==what i want && item.AwayTri==what i want
        then bind item._homeScore to a certain label
        then bind item.awayAScore to a certain label.

我知道我的要求有点复杂。。但我在这里有点绝望,希望能得到任何帮助。这种数据绑定对我来说是非常新的,我很难掌握它。这可能吗?我越是研究,我就越不这么认为。。但我希望我不是。感谢您的帮助

我的建议是您将控件的DataContext设置为要显示的游戏:

<StackPanel DataContext="{Binding SelectedGame}">
    <Label Content="{Binding HomeScoreText}" />
    <Label Content="{Binding AwayScoreText}" />
</StackPanel>
然后需要在ViewModel上公开公共属性,如下所示:

class NflGameStatus
{
    private readonly string _homeTri;
    private readonly string _awayTri;
    private string _homeScore;
    private string _awayScore;

    public String HomeScoreText
    {
        get
        {
            return _homeScore;
        }
    }
    public String AwayScoreText
    {
        get
        {
            return _awayScore;
        }
    }
}
private NflGameStatus _selectedGame;
public NflGameStatus SelectedGame
{
    get
    {
        return _selectedGame;
    }
    set
    {
        _selectedGame = value;
        RaisePropertyChanged("SelectedGame");
    }
}
现在,当您设置SelectedName属性时,它将自动更新这些字段。所以只要检查一下:

if item.HomeTri==what i want && item.AwayTri==what i want
    SelectedGame = item;
干杯,
Eric

您需要将选项卡控件绑定到一组ViewModels,每个游戏一个:

<TabControl x:Name="_tabControl" ItemsSource="{Binding GameModels}">
    <TabControl.ItemContainerStyle>
        <Style TargetType="TabItem">
            <Setter Property="Header" Value="{Binding GameTitle}"/>
            <Setter Property="Content" Value="{Binding GameContent}"/>
        </Style>
    </TabControl.ItemContainerStyle>
</TabControl>
每个
nflgamcontent
可能看起来像:

public class NflGame : ViewModelBase
{
    public String GameTitle;
    public NflGameContent GameContent;
}
public class NflGameContent : ViewModelBase
{
    private Thread _worker;

    public NflGameContent(int gameID){
        _worker = new Thread(() => UpdateScores(gameID));
        _worker.Start();
    }

    private UpdateScores(gameID){
       var appController = new DtvGsisDataParser.AppController(); //Or whatever -- you get the idea
       HomeScoreText = appController.GetHomeScore(gameID);
       AwayScoreText = appController.GetAwayScore(gameID);
       OnPropertyChanged("HomeScoreText");
       OnPropertyChanged("AwayScoreText");
    }

    public String HomeScoreText;
    public String AwayScoreText;
}
当然,您的XAML将绑定到NflGameContent并接收有关PropertyChanged的更新:

<TextBlock Text="{Binding HomeScoreText}">


是否每次都要将值绑定到相同的标签?或者您想根据某些逻辑绑定到不同的标签?我想绑定动态创建的标签,这些标签依赖于该类的homeTri和awayTri。但会有多个homeTri和awayTri的实例,我只知道如何通过foreach语句访问它们。。。如果这回答了你的问题,请告诉我。如果我搞不懂的话。。我想我得做一个计时器,每隔1秒或者别的什么时间更新一下标签。我想我还是不明白你想在UI中显示什么。你能详细说明一下视觉效果是什么吗?当然,让我拍一张屏幕快照,第一张图片是它在我的xaml中的外观。。。然后,当我运行它时(第二张图),当它在加载时从SQL数据库读取所有信息时,它看起来是正确的(TabControl上的所有内容都是动态创建的)。现在是每场比赛的分数和时间。。我需要更新到“实时”游戏时钟和分数,它来自不同的程序,根据homeTri和awayTri实时更新到每个适当的选项卡。这有意义吗?如果没有,请告诉我我想我知道我需要做什么。。非常感谢你。。我会回到这一点上。我可能有一两个问题,所以请回头看看--非常有趣。非常感谢你的帮助。。我目前正在研究如何根据您编写的内容实现此功能。tyvm对于此处的此部分:“”。。由于我正在动态创建标签(例如:team1ScoreLabel=new Label();_grid.Children.Add(team1ScoreLabel);)。。。我怎么能做与你在那行中粘贴的WPF相同的C#?我想我知道怎么做,除了那个part@user1189352为什么要动态添加子项?我最初就是这样编码的。。。。不幸的是,我在这方面有一个最后期限(老板不在乎我怎么做,只是完成这类事情),学习WPF/数据绑定的正确方法和重新编写代码将花费太多时间。。不幸的是,我不得不使用我不理解的=Twhoops,我的意思是我动态地创建了所有东西,因为它只根据我正在阅读的SQL数据库的方式创建标签和对象
<TextBlock Text="{Binding HomeScoreText}">