我有一个选择器控件,上面有两个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>