我有DataGrid
与此类似:
<sdk:DataGrid ItemSource="ItemGroups">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button
Content="Show Items"
cal:Message.Attach="ShowItems($dataContext)" />
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTextColumn Binding="{Binding Name}" Header="Name" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
在我的视图模型中,我有一个保护方法:
public bool CanShowItems(ItemGroup itemGroup)
{
return itemGroup.State == States.Active;
}
在我目前的情况下,guard方法仅返回列表中第二项的 true 。
所有其他“ShowItems”按钮都应该被禁用。
然而,当我向下滚动DataGrid时,启用按钮不在视图中,另一个启用的按钮进入视图。不会同时显示两个启用的按钮。但是,同样只有一次调用guard方法返回 true 。
可能导致这种奇怪行为的原因是什么?
非常感谢任何帮助。
答案 0 :(得分:1)
这可能是由于DataGrid
和类似控件回收DataTemplate
这一事实造成的。这会导致一些类似于您所描述的问题。一般来说,我会避免直接在行上放置操作。这可能会导致创建大量行为,尤其是在您拥有大量数据的情况下。您可能需要采用不同的方法。