UWP:根据条件更新ItemTemplate中的背景

时间:2016-11-23 15:53:02

标签: c# xaml uwp win-universal-app uwp-xaml

在UWP项目中,ListView绑定到集合player对象。每个player对象都有一个属性,例如HighScoreItemTemplate的{​​{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;
    }
}

2 个答案:

答案 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}}

更新最大分数时,获取分数最高的玩家对象并更新背景。同时将所有其他玩家的背景改回黄色。