将项添加到集合时更新DataGridRow样式

时间:2016-05-20 09:53:00

标签: c# wpf xaml mvvm datagrid

我有一个选择器控件,上面有两个DataGrid DataGrid个控件。正确的是基本DataGrid,左边是基于EntityDataGrid的{​​{1}}。用户可以选择DataGrid中的项目并将其“移动”到EntityDataGrid

问题是如何防止添加已选择的项目。由于DataGrid有自定义项提供商,因此我不能仅使用EntityDataGrid / CollectionViewSource来过滤所选项目。所以我决定将CollectionView的行标记为已禁用。但是,当EntityDataGrid绑定集合已更改时,我无法弄清楚如何更新行状态。

以下是视图的xaml标记:

DataGrid

这是一个ViewModel:

<b:FormControl 
           ...
           x:Name="Self"
           d:DataContext="{d:DesignInstance local:MoverViewModel}">
<Grid>
    <Grid.Resources>
        <local:DisableSelectedItemsConverter x:Key="DisableSelectedItemsConverter" />
    </Grid.Resources>
    ...
    <dg:EntityDataGrid x:Name="EntityDataGrid" ItemsProvider="{Binding SelectingItemsProvider}">
        <dg:EntityDataGrid.RowStyle>
            <Style TargetType="DataGridRow">
                <Style.Triggers>
                    <!-- IsEnabled should be updated when the SelectedItems collection changes, but I can't figure out how to trigger it -->
                    <Setter Property="IsEnabled">
                        <Setter.Value>
                            <!-- Converter code: !collection.Contains(item) -->
                            <MultiBinding Converter="{StaticResource DisableSelectedItemsConverter}">
                                <!-- item -->
                                <Binding />
                                <!-- collection -->
                                <Binding ElementName="Self" Path="DataContext.SelectedItems" />
                            </MultiBinding>
                        </Setter.Value>
                    </Setter>
                </Style.Triggers>
            </Style>
        </dg:EntityDataGrid.RowStyle>
    </dg:EntityDataGrid>

    <DataGrid x:Name="SelectedItemsDataGrid" ItemsSource="{Binding SelectedItems}" />
    ...
</Grid>

0 个答案:

没有答案