簡體   English   中英

將類成員的多個實例綁定到特定標簽

[英]DataBinding multiple instances of members of a class to specific labels

在此處輸入圖片說明在此處輸入圖片說明 我有一個具有另一個類的私有成員的類,並且該類是另一個類的ObserveableCollection ..這是我需要從中獲取信息的類,具有要進行數據綁定的私有成員。

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;

所以這個NflGameStatus的多個實例會在每次檢測到游戲時彈出...我唯一知道如何訪問它的方法是這樣做:

_controller = new DtvGsisDataParser.AppController();
    foreach (var item in _controller.Games)
            {
                string hometri = item.HomeTri;
                string awaytri = item.AwayTri;
        ... etc etc
            }

我如何獲得它,以便如果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>

因此,首先,您需要將HomeScoreTextAwayScoreText作為NflGameStatus類的公共屬性公開:

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

然后,您需要像這樣在ViewModel上公開一個公共屬性:

private NflGameStatus _selectedGame;
public NflGameStatus SelectedGame
{
    get
    {
        return _selectedGame;
    }
    set
    {
        _selectedGame = value;
        RaisePropertyChanged("SelectedGame");
    }
}

現在,當您設置SelectedGame屬性時,它將自動更新這些字段。 因此,只需檢查一下即可:

if item.HomeTri==what i want && item.AwayTri==what i want
    SelectedGame = item;

干杯,埃里克

您需要將選項卡控件綁定到ViewModel的集合,每個游戲一個:

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

ViewModel可能類似於:

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

每個NflGameContent可能看起來像:

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並接收更新OnPropertyChanged:

<TextBlock Text="{Binding HomeScoreText}">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM