2013-04-25 47 views
0

我试图改变一个框的颜色在gridview(有ItemTemplates有100个绿色框)。无法更改gridview项目源

首先,我创建了一个列表(类型为我的课),我添加的所有项目列出和我添加列表到我的GridView控件来源:

grid1.ItemsSource = boxlist; 

后,我加入了项目点击事件在gridview上。我希望当我点击一个项目时,这个项目的颜色将会改变。所以我编辑清单,因为它:

int id = ((Boxes)e.ClickedItem).id; 
boxlist[id].color = "DarkRed"; 
grid1.ItemsSource = boxlist; 

我试过它改变点击项目的颜色,但它不起作用。列表项的颜色正在改变,但gridview没有采取。但我希望这个gridview采用这个新的源代码。我怎么解决这个问题?

我的类:

class Boxes 
{ 
    public int id { get; set; } 
    public string color { get; set; } 
} 

的GridView

的XAML
<GridView x:Name="grid1" HorizontalAlignment="Left" Margin="354,41,0,0" VerticalAlignment="Top" Width="800" Height="650" SelectionMode="None" IsItemClickEnabled="True" ItemClick="grid1_ItemClick"> 
     <GridView.Resources> 
      <DataTemplate x:Key="DataTemplate1"> 
       <Grid Height="50" Width="50"> 
        <Rectangle x:Name="rect1" Width="50" Height="50" Fill="{Binding color}" Tag="{Binding id}"/> 
       </Grid> 
      </DataTemplate> 
     </GridView.Resources> 
     <GridView.ItemTemplate> 
      <StaticResource ResourceKey="DataTemplate1"/> 
     </GridView.ItemTemplate> 
    </GridView> 
+0

你在WPF这样做呢?的WinForms? - 你能提供你正在使用的ItemTemplate和Gridview XAML吗? - 您需要使用ObservableCollection而不是List,以便用Collection中的更改通知UI。 – FHnainia 2013-04-25 17:40:44

+0

我正在做XAML。 – 2013-04-25 17:42:27

+0

我将List更改为ObservableCollection,但它有相同的内容。仍然无法更新。 – 2013-04-25 17:50:06

回答

2

你必须为null的ItemSource设置之前新值:

ctlList.ItemsSource = null; 
ctlList.ItemsSource = YourObjects; 

我要推荐使用的DataContext和绑定的,而不是你的解决方案:

http://www.codeproject.com/Articles/30905/WPF-DataGrid-Practical-Examples

+0

其实我以前看过你的帖子,但是当我设置null并重新设置为再次列表时,它需要一段时间,所以它不是很快。 grid1.Items不包含任何方法,如“刷新”。 – 2013-04-25 18:46:50

+1

这是您的案例中唯一的解决方案。当你说“它不快”时,你的意思是什么?你的名单有多大? – Kai 2013-04-25 18:50:35

+0

不,我的意思是说,当您清除一个清单并重新填充所有项目时,需要一段时间。你可以尝试在视觉工作室。试试你的答案,看看。 – 2013-04-25 21:06:45

0

您需要使用的DataContext,而不是像这样:

grid1.DataContext = boxlist; 
+0

抱歉,但它不起作用。当我这样做时,我无法在GridView中看到任何项目。 – 2013-04-25 18:41:57