我正在尝试在gridview中更改框的颜色(具有包含100个绿框的ItemTemplates)。
首先,我创建了一个列表(键入了我的类),然后我将所有项目添加到列表中,并将列表添加到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 :(得分:2)
您必须在设置新值之前使ItemSsource为空:
ctlList.ItemsSource = null;
ctlList.ItemsSource = YourObjects;
我建议使用DataContext和Binding代替您的解决方案:
http://www.codeproject.com/Articles/30905/WPF-DataGrid-Practical-Examples
答案 1 :(得分:0)
您需要使用DataContext,如下所示:
grid1.DataContext = boxlist;