У меня этот сценарий хорошо, я позволю модели объяснить.Как программно обновить wpf C#?
public class ScheduleMonthlyPerDayModel
{
public DateTime Date { get; set; }
public string Day
{
get
{
return Date.Day.ToString();
}
}
ObservableCollection<AppointmentDTO> _appointments;
public ObservableCollection<AppointmentDTO> Appointments
{
get
{
return _appointments;
}
set
{
_appointments = value;
if (value.Count > 0)
NotifyOfPropertyChange(() => HasSchedule);
}
}
public bool BelongsToCurrentMonth
{
get;
set;
}
public bool HasSchedule
{
get
{
return _appointments.Count > 0 ? true : false;
}
}
public ScheduleMonthlyPerDayModel()
{
_appointments = new ObservableCollection<AppointmentDTO>();
}
public void ClearCollection()
{
_appointments.Clear();
}
}
public class ScheduleMonthlyPerWeekModel
{
public ScheduleMonthlyPerDayModel Sunday{get; set;}
public ScheduleMonthlyPerDayModel Monday{get; set;}
public ScheduleMonthlyPerDayModel Tuesday{get; set;}
public ScheduleMonthlyPerDayModel Wednesday{get; set;}
public ScheduleMonthlyPerDayModel Thursday{get; set;}
public ScheduleMonthlyPerDayModel Friday{get; set;}
public ScheduleMonthlyPerDayModel Saturday{get; set;}
}
привязок к XAML работе с проблеск XAML как это:
headereditemscontrol itemsSource= weekcollection
, где weekcollection является объектом schedulemonthlyperweekmodel
.
Внутри этого headereditemscontrol я шаблонного каждый день для каждого свойства schedulemonthlyperweekmodel следующим образом:
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Style="{StaticResource CalendarDates}" Text="{Binding Path=Saturday.Day}" />
<ListBox Grid.Row="1" Grid.ColumnSpan="2" Padding="0"
ItemsSource="{Binding Path= Saturday.Appointments}"
ItemTemplate="{StaticResource myItemStyle}"
Visibility="{Binding Path=Saturday.HasSchedule, Converter={StaticResource BoolToVisibilityConverter}}" />
В принципе, я пытаюсь добиться ежемесячного представления с каждым днем, имеющий набор назначений. Моя проблема заключается в том, что когда я программно добавляю элементы к примеру, например, коллекция saturday.appointments, через отладочное добавление элементов, имеет успех и уведомляет основную коллекцию (weekcollection), не обновляет пользовательский интерфейс.
Что я хотел бы достичь: после добавления предполагаемого назначения на соответствующий день/даты пользовательский интерфейс также будет соответствующим образом обновляться, но как мне это сделать?
В настоящее время пользовательский интерфейс обновляется только в том случае, если я меняю/переключается на другой, а затем обратно, после чего встречи отображаются хорошо. Я хотел бы автоматизировать его, так как это некрасиво требовать от пользователя переключения на что-то еще, а затем назад, прежде чем они смогут увидеть список встреч.
Что такое 'NotifyOfPropertyChange', и я не вижу внедренного INotifyPropertyChanged. –
Если вы привязываете DataSource элемента управления, вам не нужно ничего «обновлять». –
Прямо сейчас, если вы добавляете элемент в коллекцию Appointments, он должен автоматически показывать этот элемент в ListBox. Однако привязка видимости не обновляется, когда список переходит из пустого в заполненный. Это правда? –