【发布时间】:2017-04-07 17:18:22
【问题描述】:
在 UWP 项目中,ListView 绑定到集合 player 对象。每个player 对象都有一个属性,例如HighScore。 ListView 的 ItemTemplate 显示每个玩家的 HighScore。我想更改ItemTemplate 中ItemTemplate 中Grid 的Background,当它的HighScore 匹配BiggestScore(页面DataContext 的属性)时。这代表了所有玩家的最大分数。 BiggestScore 在设置HighScore 后更新。
有什么想法可以实现这一点吗?
这里有一些示例代码,希望能说明各个部分。
XAML:
<Grid x:Name="root" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ListView x:Name="lvwPlayers" ItemsSource="{Binding Players}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid x:Name="grdHighScore" Background="Yellow">
<TextBlock Text="{Binding HighScore}"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
代码隐藏:
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
var allPlayers = new AllPlayers();
allPlayers.Players.Add(new Player(100));
allPlayers.Players.Add(new Player(112));
allPlayers.Players.Add(new Player(1160));
allPlayers.Players.Add(new Player(122));
this.DataContext = allPlayers;
}
}
玩家:
public class Player : INotifyPropertyChanged
{
protected void OnPropertyChanged([CallerMemberName] string caller = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(caller));
}
public event PropertyChangedEventHandler PropertyChanged;
public Player( int high)
{
HighScore = high;
}
private int _highScore;
public int HighScore
{
get { return _highScore; }
set
{
_highScore = value;
OnPropertyChanged();
}
}
}
所有玩家:
public class AllPlayers : INotifyPropertyChanged
{
public ObservableCollection<Player> Players { get; set; }
public AllPlayers()
{
Players = new ObservableCollection<Player>();
}
protected void OnPropertyChanged([CallerMemberName] string caller = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(caller));
}
public event PropertyChangedEventHandler PropertyChanged;
public void ChangeScore(int playerIndex, int highScore)
{
Players[playerIndex].HighScore = highScore;
}
private void UpdateBiggestScore()
{
BiggestScore = (from player in Players select player.HighScore).Max();
}
private int _biggestScore;
public int BiggestScore
{
get { return _biggestScore; }
set
{
_biggestScore = value;
OnPropertyChanged();
}
}
}
【问题讨论】:
标签: c# xaml uwp win-universal-app uwp-xaml