У меня есть DataGrid (ItemsSource является ObservableCollection) с DataGridCheckBoxColumn определяется как например:WPF DataGridCheckBoxColumn в не обновляется с ViewModel
<DataGrid AutoGenerateColumns="False"
SelectionUnit="FullRow"
CanUserAddRows="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
IsReadOnly="True"
SelectionMode="Single"
ItemsSource="{Binding SearchResult, Mode=TwoWay, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}">
<!--additional columns-->
<DataGridCheckBoxColumn Header="Add"
IsReadOnly="False"
Binding="{Binding Path=IsSelected, Mode=TwoWay, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}">
</DataGrid>
Наручники работают отлично в одном направлении, ViewModel может видеть изменения в коллекции, но она не работает в другом направлении. Конечно, я могу повторно инициализировать коллекцию после ее обновления, но это, конечно, испортило порядок сортировки.
List<int> Ids = new List<int>();
foreach (var result in SearchResult) // binding source, of type ObservableCollection
{
if (result.IsSelected)
{
Ids.Add(result.Id);
result.IsSelected = false; // should uncheck the corresponding DataGridCheckBoxColumn cell
}
}
//SearchResult = new ObservableCollection<SearchSeries>(SearchResult); // does the job but rearranges the sorting
//RaisePropertyChanged("SearchResult"); // doesn't work either
Я использую VS 2013 и новейший доступный инструментарий MVVM Light Toolkit.
Вы поднимаете измененное событие свойства, когда IsSelected изменен из ViewModel? –
Не должна ли строка RaisePropertyChanged («SearchResult») сделать это, если я не ошибаюсь? IsSelected является свойством членов SearchResult. – Venom
В наборе IsSelected вы должны иметь RaisePropertyChanged («IsSelected») –