Есть два столбца, в столбце Год рождения, когда устанавливается дата то в столбце Возраст на: возраст меняется. Подскажите пожалуйста, как сделать что бы в Header Возраст на: когда меняешь дату, независимо от столбца Год рождения, менялась дата в столбце ячеек Возраст на:?
public class MainViewModel : OnPropertyChangedClass
{
ObservableCollection<Model> allModel = new ObservableCollection<Model>();
public ObservableCollection<Model> AllModel
{
get
{
return allModel;
}
set
{
allModel = value;
OnAllPropertyChanged();
}
}
DateTime dateNow = DateTime.Now.AddDays(0);
public DateTime DateNow
{
get => dateNow; set { dateNow = value; OnAllPropertyChanged(); }
}
}
public class Model : OnPropertyChangedClass
{
string age;
public string Age
{
get => CalculateAge(DateOfBirthAndMonth); set { age = value; OnAllPropertyChanged(); }
}
DateTime dateOfBirthAndMonth = new DateTime(2000, 01, 01);
public DateTime DateOfBirthAndMonth
{
get => dateOfBirthAndMonth;
set
{
dateOfBirthAndMonth = value;
OnAllPropertyChanged();
}
}
public string CalculateAge(DateTime DateOfBirth)
{
TimeSpan timeSpan = DateTime.Now - DateOfBirth;
DateTime age = new DateTime(timeSpan.Ticks);
int years = age.Year - 1;
int month = age.Month - 1;
string result = String.Format("{0},{1}", years, month);
return result;
}
}
}
<Window x:Class="SwitchBetweenDateTime.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SwitchBetweenDateTime"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<local:MainViewModel/>
</Window.DataContext>
<Grid>
<DataGrid ItemsSource="{Binding AllModel}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn x:Name="Age" Binding="{Binding Age, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
Header="Возраст на: " IsReadOnly="True">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Width="Auto">
<Label Content="{Binding Content, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
<DatePicker SelectedDate="{Binding DataContext.DateNow, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
</StackPanel>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
<DataGridTemplateColumn Header="Год рождения">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding DateOfBirthAndMonth, StringFormat=dd.MM.yyyy}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding DateOfBirthAndMonth}" Height="Auto"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
Необходимо исправить код вычисления возраста:
public string CalculateAge(DateTime DateNow, DateTime DateOfBirth)
{
//Вам нужно отсчитывать возраст от выбранной даты
//в DateTimePicker из заголовка столбца "Возраст на" и
//передавать в эту функцию свойство DateNow из MainViewModel
TimeSpan timeSpan = DateNow - DateOfBirth;/*DateTime.Now - DateOfBirth;*/
DateTime age = new DateTime(timeSpan.Ticks);
int years = age.Year - 1;
int month = age.Month - 1;
string result = String.Format("{0},{1}", years, month);
return result;
}
Вариант без использования интерфейса INotifyPropertyChanged - подписаться на событие OnValueChanged у DateTimePicker'а "Возраст на" и вызывать функцию CalculateAge у каждого объекта типа Model в Grid.
yourDateTimePickerName.ValueChanged += picker_OnValueChanged;
public void picker_OnValueChanged(Object sender, EventArgs e)
{
DateTimePicker current = sender as DateTimePicker;
foreach(var item in myGrid)//myGrid контейнер для элементов типа Model
{
if(item is Model)
{
Model tmp = item as Model;
tmp.CalculateAge(current.Value, tmp.dateOfBirthAndMonth);
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Создал специальный вспомогательный класс для соединения и работы с БД
Прошу помощи в разработке программы, оригинал на паскале написан и на 32/64 не переписать его и не запустить (досбоксы и тому подобное не подходит)Надо...
Ошибка в запросe (1054): Unknown column 'gRomNo' in 'field list'