0

我有以下 ViewModel 并在我的代码中将其链接到项目控件。但是,当我使用以下行时:

onOffSchedule.dc.schedules[0].days[0].data[0] = 9;

它有时只更新用户界面??当它这样做时,它会更新所有错误的数据。而不是将第一个计划、第一天和第一个时间段分配给 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;
    }
4

2 回答 2

1

您正在更新数据数组中的元素。该数组不会触发属性更改通知,因此视图无法自行更新。使您的数据成为 ObservableCollection 并查看它是否有帮助。

于 2013-07-15T16:10:16.377 回答
1
onOffSchedule.dc.schedules[0].days[0].data[0] = 9;

在正常情况下,该行不会触发更新。您所做的只是在整数数组中设置一个整数:

public int[] data { ... }

当整个数组发生变化时,您将OnPropertyChanged调用放在那里。但是当您只设置其中一个值时,WPF 并不知道发生了这种情况。

ObservableCollection<Day>通过在其他课程上使用,您有正确的想法。Day你需要在你的类中为 data 属性做类似的事情。

于 2013-07-15T16:10:55.647 回答