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)});
}
}