0

小さな問題があります。

XML ファイルを itemGridView と itemListView にバインドしています

Databind: (ここで行ったことを提供するだけで、完全に正常に動作します)

 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 アプリ ListView SelectedItem SelectedVisualState

DataTemplate の制御

于 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 に答える