ObservableCollection不总是更新UI,变量更改不正确
本文关键字:变量 不正确 UI 更新 ObservableCollection | 更新日期: 2023-09-27 18:22:20
我有下面的ViewModel,在我的代码中将它链接到一个items控件。但是,当我使用诸如之类的行时
onOffSchedule.dc.schedules[0].days[0].data[0] = 9;
它只是有时更新UI??当它这样做时,它会更新所有错误的数据。而不是将第一个时间表、第一天和第一个时隙分配给9。它会更新第一个时间段的第一个时间表(全天??)。
因此,我试图弄清楚为什么它会更新days数组中的每个索引,而不仅仅是第一个索引。
提前感谢!
public class ScheduleVM
{
public ObservableCollection<Schedule> schedules { get; set; }
private static ScheduleVM viewModel = null;
public static ScheduleVM getInstance()
{
if (viewModel == null)
viewModel = new ScheduleVM();
return viewModel;
}
private ScheduleVM()
{
schedules = new ObservableCollection<Schedule>();
for (byte i = 0; i < 32; i++)
schedules.Add(new Schedule());
}
}
public class Schedule
{
public ObservableCollection<Day> days { get; set; }
public Schedule()
{
days = new ObservableCollection<Day>();
int[] values = new int[96];
for (byte i = 0; i < 96; i++)
values[i] = 3;
for (byte i = 0; i < 8; i++)
days.Add(new Day() { data = values });
}
}
public class Day : BaseVM
{
private int[] _data;
public int[] data
{
get
{
return _data;
}
set
{
_data = value;
OnPropertyChanged("data");
}
}
}
下面是与此代码一起使用的视图。这是我在另一个窗口中创建的用户控件(在该窗口中,用户控件被称为"onOffSchedule"
public ScheduleVM dc { get; private set; }
public Schedule()
{
InitializeComponent();
dc = ScheduleVM.getInstance();
this.DataContext = dc;
schedule.ItemsSource = dc.schedules[0].days;
}
onOffSchedule.dc.schedules[0].days[0].data[0] = 9;
在正常情况下,该行不会触发更新。您所做的只是在整数数组中设置一个整数:
public int[] data { ... }
当整个数组发生更改时,您可以在其中放入OnPropertyChanged
调用。但是,当您只设置其中一个值时,WPF并不知道发生了什么。
在其他类上使用ObservableCollection<Day>
,您的想法是正确的。您需要在Day
类中为数据属性执行类似的操作。
您正在更新数据数组中的一个元素。该数组不会触发属性更改通知,因此View不知道如何更新自己。让你的数据成为ObservableCollection,看看它是否有帮助。