我正在使用devexpress datagrid来构建我的wpf应用程序。我用2列非常简单。第二列包含带加号的按钮。按钮绑定到ViewModel中的Command(使用CanExecute实现)。
重点是“CanExecute”没有被执行,按钮被正确刷新,特别是当我滚动网格时。
低于2个screnns
纠正按钮状态
按钮状态未刷新
Devexpress DataGrid使用行virtualization,因此只创建了几行,只有数据正在发生变化。
我几乎已经解决了我的问题,但我的解决方案还不足以接受。 我注意到我要打电话了
CommandManager.InvalidateRequerySuggested();
所以我添加了虚拟转换器,它总是返回相同的值,但也调用上面的方法
class DummyIsEnabledConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
CommandManager.InvalidateRequerySuggested();
return true;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
我正在使用我的转换器进行一些无用的绑定,但每次更改行模型时都会调用convert方法并且“Add button”会得到正确的状态。
被修改
我的XAML代码
<DataTemplate x:Key="AddComponentCellTemplate">
<Grid >
<Button Command="{Binding ElementName=itemsGrid, Path=DataContext.AddCommand, Mode=OneWay}"
CommandParameter="{Binding Path=RowData.Row}" ContentTemplate="{StaticResource AddTemplate}">
</Button>
</Grid>
</DataTemplate>
....
<dxg:GridControl ItemsSource="{Binding Items}" Name="itemsGrid" IsFilterEnabled="False">
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="Name" Header="Name" />
<dxg:GridColumn FieldName="" Header="" Width="20" FixedWidth="True" CellTemplate="{DynamicResource AddComponentCellTemplate}"/>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView Style="{StaticResource defaultTableViewStyle}" />
</dxg:GridControl.View>
</dxg:GridControl>