WPF devexpress datagrid - 不刷新CanExecute

时间:2015-01-02 21:46:30

标签: c# wpf mvvm datagrid icommand

我正在使用devexpress datagrid来构建我的wpf应用程序。我用2列非常简单。第二列包含带加号的按钮。按钮绑定到ViewModel中的Command(使用CanExecute实现)。

重点是“CanExecute”没有被执行,按钮被正确刷新,特别是当我滚动网格时。

低于2个screnns

Correct button state

纠正按钮状态

Button state not refreshed

按钮状态未刷新

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>

0 个答案:

没有答案