JavaScript
- 484 ответа
 - 0 вопросов
 
    455
    Вклад в тег
    
      
      
    
  
  
  
  <DataGrid ItemsSource="{Binding GridItems}" AutoGenerateColumns="False" >
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Name}"></DataGridTextColumn>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <DatePicker SelectedDate="{Binding Date, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ></DatePicker>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
             </DataGrid.Columns>
        </DataGrid>public class MyItem{
        public string Name { get; set; } = "myname";
        public Func<DateTime?, bool> DateChecker = null;
        public DateTime? _Date;
        public DateTime? Date        {
            get => _Date;
            set {
                if (DateChecker != null && DateChecker.Invoke(value)){//При попытке установить дату вызваем метод который проверить сколько в коллекции у нас  уже таких дат
                    _Date = value;//Устанавливает дату если метод DateChecker вернул true
                }
            }
        }
    }public partial class MainWindow : Window
    {
        public ObservableCollection<MyItem> GridItems { get; set; }= new ObservableCollection<MyItem>(){};//Коллекция элементов
        public bool DateCheckerMethod(DateTime? dt){//Метод который будет вызываться при попытке изменить дату
            if (dt != null && GridItems.Count(item => item.Date != null && item.Date.Value.CompareTo(dt.Value) == 0) >= 7){
                MessageBox.Show("Максимум 7 дат");
                return false;
            }
            return true;
        }
        public MainWindow()
        {
            InitializeComponent();
            DataContext = this;
            GridItems.CollectionChanged += (sender, args) => {//При добавлении в колелекцию нового элемента, присваиваем метод обработки  дат
                foreach (var myItem in args.NewItems.Cast<MyItem>())
                    myItem.DateChecker = DateCheckerMethod;
            };
            GridItems.Add(new MyItem() { _Date = DateTime.Now.Date});   
            GridItems.Add(new MyItem() { _Date = DateTime.Now.Date});   
            GridItems.Add(new MyItem() { _Date = DateTime.Now.Date});   
            GridItems.Add(new MyItem() { _Date = DateTime.Now.Date});   
            GridItems.Add(new MyItem() { _Date = DateTime.Now.Date});   
            GridItems.Add(new MyItem() { _Date = DateTime.Now.Date});   
            GridItems.Add(new MyItem() { _Date = DateTime.Now.Date});
            GridItems.Add(new MyItem() { _Date = DateTime.Now.Date.AddDays(1)});
        }
    }