[英]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>
因此,首先,您需要將HomeScoreText
和AwayScoreText
作為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.