Can't change gridview itemssource
我正在尝试在gridview(具有ItemTemplates,其中有100个绿色框)中更改框的颜色。
首先,我创建了一个列表(作为我的班级键入),并将所有项目添加到列表中,并将列表添加到了gridview源中:
1 | grid1.ItemsSource = boxlist; |
之后,我为gridview上的项目单击添加了一个click事件。我希望当我单击某个项目时,该项目的颜色将被更改。所以我按如下方式编辑了列表:
1 2 3 | int id = ((Boxes)e.ClickedItem).id; boxlist[id].color ="DarkRed"; grid1.ItemsSource = boxlist; |
我尝试过更改点击项的颜色,但是它不起作用。列表项的颜色正在成功更改,但是gridview无法使用它。但是我希望gridview可以使用这个新资源。我该如何解决这个问题?
我的课:
1 2 3 4 5 | class Boxes { public int id { get; set; } public string color { get; set; } } |
GridView的XAML
1 2 3 4 5 6 7 8 9 10 11 12 | <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> |
您必须在设置新值之前将ItemSource设为空:
1 2 | ctlList.ItemsSource = null; ctlList.ItemsSource = YourObjects; |
我建议使用DataContext和Binding代替您的解决方案:
http://www.codeproject.com/Articles/30905/WPF-DataGrid-Practical-Examples
您需要像这样使用DataContext:
1 | grid1.DataContext = boxlist; |