在UWP项目中,ListView
绑定到集合player
对象。每个player
对象都有一个属性,例如HighScore
。 ItemTemplate
的{{1}}显示每个玩家的ListView
。我想更改显示HighScore
的{{1}} Background
Grid
,当它的HighScore与ItemTemplate
匹配时({1}}属性HighScore
1}})。这是所有玩家中得分最高的。设置BiggestScore
后会更新DataContext
。
我是如何实现这一目标的?
非常感谢您的任何帮助。
这是一些示例代码,希望能够说明各个部分。
XAML:
BiggestScore
背后的代码:
HighScore
PLAYER:
<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>
ALLPLAYERS:
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;
}
}
答案 0 :(得分:0)
在DataContext中创建属性,说明HighScore是否大于BiggestScore,例如。 bool IsBiggest
绑定它:
Background={Binding IsBiggest, Converter=HighScoreToColorConverter}
其中YourConverter可能是这样的:
public class HighScoreToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var isBiggest = (bool)value;
var color = isBiggest ? new SolidColorBrush(Colors.Red) : new SolidColorBrush(Colors.Yellow);
return color;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
var color = value as SolidColorBrush;
if (color != null)
{
return color == new SolidColorBrush(Colors.Red);
}
return false;
}
}
答案 1 :(得分:0)
您可以将背景颜色添加为播放器属性
<Grid x:Name="grdHighScore" Background="{Binding BackgroundColor}">
<TextBlock Text="{Binding HighScore}"/>
</Grid>
并将其绑定到网格背景
{{1}}
更新最大分数时,获取分数最高的玩家对象并更新背景。同时将所有其他玩家的背景改回黄色。