0

我有一個小問題。更改選定的數據綁定Itemtemplate的顏色

我綁定一個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中使用的標準250模板?

我試圖通過數據綁定本身來改變顏色,但我打開更容易做到這一點。

我需要的所有事情都是當用戶點擊物品時,物品的顏色從紅色變爲綠色。

+1

有你在ColourClass嘗試INotifyPropertyChanged的? – sexta13

回答

0

更新1

INotifyPropertyChanged也會爲你工作。我正在給最簡單的演示來幫助你。我懷疑你怎麼綁定Foreground字符串屬性Colour的幫助,而不使用轉換器類實現IValueConverter

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

Controlling The DataTemplate

+0

謝謝!該代碼幫助我弄清楚如何實現它! – ForeverLearning

0

想出如何。由於Xyroid的代碼,幫助了很多

在類:

private string _colour; 

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

在該方法中:

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