Я работаю над проектом WPF. У меня есть класс, как это:WPF ItemsControl not refreshing
public class Field
{
public ReservationDTO reservation { get; set; }
public DelegateCommand FieldChangeCommand { get; set; }
public bool Available { get; set; }
}
И у меня есть коллекция его
public ObservableCollection<Field> Fields { get; set; }
мой взгляд выглядит следующим образом
<ItemsControl ItemsSource="{Binding Fields}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid
Columns="{Binding Columns}"
Rows="{Binding Rows}"
/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Command="{Binding FieldChangeCommand}" CommandParameter="{Binding}" Content="{Binding reservation.Statusz}" FontSize="5" IsEnabled="{Binding Available}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Это прекрасно работает в первый раз, когда он грузы. Но позже я мог бы изменить некоторые значения полей. Например: (часть кода ViewModel)
Fields[SelectedIndex].reservation.Statusz = "Sold";
Fields[SelectedIndex].Available = false;
OnPropertyChanged("Fields");
OnPropertyChanged("Available");
уверен, что поля обновляются после этого, потому что другие элементы на представлении (например, текстовые поля) обновить. Но buttongrid в представлении не обновляется новыми значениями полей.
Может кто-нибудь, пожалуйста, скажите мне, почему и как решить эту проблему?
Вы implem INotifyPropertyChanged в вашем классе резервированияDTO. Если нет, пользовательский интерфейс не будет получать уведомления о том, что ваше свойство Statusz изменилось. – Bijington
@Bijington У меня есть ViewModelBase вот так. public abstract class ViewModelBase: INotifyPropertyChanged { общественное событие PropertyChangedEventHandler PropertyChanged; защищен ViewModelBase() {} защищенный виртуальный аннулируются OnPropertyChanged ([CallerMemberName] Строка ИмениСвойства = NULL) { если (PropertyChanged! = NULL) { PropertyChanged (это, новые PropertyChangedEventArgs (ИмениСвойства)); } } } –
@Bijington, если я создаю свой класс Field, полученный из ViewModelBase, достаточно? Потому что я не уверен, могу ли я изменить класс ReservationDTO. –