Установите все флажки с помощью кнопки, когда флажок помещен внутри itemscontrol и с привязкой данных к наблюдаемой коллекции
Привет,
У меня есть список строк и чекбоксов. Он имеет два свойства: одно-ItemName, а другое-CheckedStatus. Я хочу, чтобы эта кнопка могла проверить все флажки.
<ItemsControl Name="IC" ItemsSource="{Binding ItemsSorted}"> <ItemsControl.ItemTemplate> <DataTemplate> <StackPanel> <CheckBox Name="Mycb" IsThreeState="False" FontSize="12" Foreground="WhiteSmoke" Content="{Binding ItemName}" IsChecked="{Binding IsChecked}"/> </StackPanel> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl>
Тогда у меня есть здесь кнопка в том же окне но вне ItemsControl конечно
<Button Grid.Row="1" Content="Select All" Name="SelectAll" Style="{StaticResource ButtonStyle}" MinWidth="150" Margin="0,5,20,20" Click="SelectAll_Click"/>
Вот WindowAViewModel.в CS
public WindowAViewModel(string pageTitle, WindowBViewModel windowBViewModel) { PageTitle = pageTitle; MyItems.Add(new MyCustomItemViewModel("Apple", windowBViewModel)); MyItems.Add(new MyCustomItemViewModel("Orange", windowBViewModel)); MyItems.Add(new MyCustomItemViewModel("Banana", windowBViewModel)); }
Вот MyCustomItemViewModel.в CS
[ImplementPropertyChanged] public class MyCustomItemViewModel { public string ItemName { get; set; } public bool IsChecked { get; set; } public WindowBViewModel WindowBViewModelObj { get; set; } public MyCustomItemViewModel(string itemName, WindowBViewModel windowBViewModel) { ItemName = itemName; WindowBViewModelObj = windowBViewModel; } private void OnIsCheckedChanged() { if (IsChecked) WindowBViewModelObj.MyItems.Add(this); else WindowBViewModelObj.MyItems.Remove(this); } }
а вот и BaseWindowViewModel.cs
public class BaseWindowViewModel { public string PageTitle { get; set; } private ObservableCollection<MyCustomItemViewModel> _myItems; public ObservableCollection<MyCustomItemViewModel> MyItems { get { if (_myItems == null) { _myItems = new ObservableCollection<MyCustomItemViewModel>(); _myItemsSorted = CollectionViewSource.GetDefaultView(_myItems); _myItemsSorted.SortDescriptions.Add(new SortDescription() { PropertyName = "ItemName" }); } return _myItems; } } private ICollectionView _myItemsSorted; public ICollectionView MyItemsSorted { get { return _myItemsSorted; } } }
Что я уже пробовал:
Я уже пробовал это:
private void SelectAll_Click(object sender, RoutedEventArgs e) { foreach (var currentItem in IC.Items) { var container = IC.ItemContainerGenerator.ContainerFromItem(currentItem) as FrameworkElement; var checkBox = container.FindName("Mycb") as CheckBox; { checkBox.IsChecked = true; } } }
но выдал исключение " System. NullReferenceException: 'ссылка на объект не установлена на экземпляр объекта"."