0

我有一个小问题。

我将 XML 文件绑定到 itemGridView 和 itemListView

数据绑定:(工作得很好,只提供我在这里所做的)

 var data = from query in xdoc.Descendants("Colour")
                       select new ColourClass
                       {
                           Colour = "FFFF0000"

                       };
            itemGridView.DataContext = data;
            itemListView.DataContext = data;

我想在选择网格中的项目时更改文本的颜色(永久更改颜色)。我写了这个:它似乎不起作用。

    void ItemView_ItemClick(object sender, ItemClickEventArgs e)
    {

        ((ColourClass) e.ClickedItem).Colour = "#FF46FF00";

    }

我的 XAML:

<GridView
            x:Name="itemGridView"
            AutomationProperties.AutomationId="ItemsGridView"
            AutomationProperties.Name="Items"
            TabIndex="1"
            Grid.RowSpan="2"
            Padding="116,136,116,46"
            ItemsSource="{Binding}"
            ItemTemplate="{StaticResource Standard250x250ItemTemplate}"
            SelectionMode="None"
            IsSwipeEnabled="false"
            IsItemClickEnabled="True"
            ItemClick="ItemView_ItemClick"/>

和标准模板:

<DataTemplate x:Key="Standard250x250ItemTemplate">
    <Grid HorizontalAlignment="Left" Width="400" Height="60">
        <StackPanel VerticalAlignment="Bottom" Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}">
            <TextBlock Text="test" Foreground="{Binding Colour, Mode=TwoWay}" Style="{StaticResource AppIDTextStyle}" Height="60" Margin="15,0,15,0"/>
        </StackPanel>
    </Grid>
</DataTemplate>

我将如何更改 gridview 中使用的 Standard 250 模板中特定项目的颜色?

我试图通过数据绑定本身来改变颜色,但我愿意接受更简单的方法。

我需要做的只是当用户单击项目时项目的颜色从红色变为绿色。

4

2 回答 2

0

更新 1

INotifyPropertyChanged也将为您工作。我正在提供最简单的演示,这将对您有所帮助。我怀疑您如何在不使用转换器类实现的情况下借助Foreground字符串属性进行绑定。ColourIValueConverter

XAML

<GridView x:Name="gv" SelectionMode="None" IsItemClickEnabled="True" ItemClick="gv_ItemClick_1">
    <GridView.ItemTemplate>
        <DataTemplate>
            <TextBlock FontSize="20" Text="{Binding Color}" Width="200" />
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

C#

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    gv.ItemsSource = new List<ColourClass> 
    {
        new ColourClass("abc"),
        new ColourClass("dsd"),
        new ColourClass("yhd"),
        new ColourClass("nve"),
        new ColourClass("a3e"),
    };
}

private void gv_ItemClick_1(object sender, ItemClickEventArgs e)
{
    ((ColourClass)e.ClickedItem).Color = "#FF46FF00";
}


public class ColourClass : INotifyPropertyChanged
{
    private string _Color;
    public string Color
    {
        get { return _Color; }
        set { _Color = value; OnPropertyChanged("Color"); }
    }

    public ColourClass(string c)
    {
        Color = c;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string Prop)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(Prop));
        }
    }
}

这些会帮助你。

Metro App ListView SelectedItem Selected VisualState

控制数据模板

于 2013-09-27T11:01:35.087 回答
0

想通了。感谢 Xyroid 的代码,帮了大忙

在课堂里:

    private string _colour;

    public string Colour
    {
        get { return _colour; }
        set
        {
            _colour = value;
            NotifyPropertyChanged("Colour");
        }
    }

在方法中:

   ((AppToDownload) e.ClickedItem).Colour = "#FF46FF00";
于 2013-09-28T10:14:03.580 回答